This is Kara’s first pass at looking at the Packet 7 data (with data from 2019-03-18). (Note: PDF printed portrait, 80% zoom, minimum margins.)
Confirmatory hypotheses (as specified in preregistration)
NOTE: I included all participants, even if they failed attention checks, since we did not specify that we would exclude participants in the preregistration. At some point we should try running everything on the subset of participants who passed all attention checks just so that we know, but this decreases our sample sizes pretty dramatically.
ALSO NOTE: I included only the second sample of Ghanaian participants, who were recruited according to our standards and as specified in the preregistration. For the most part, all results are the same when including the full, “double” sample of Ghanaian participants.
Hypothesis #1
Hypothesis #1: People who score higher on the Tellegen Absorption Scale (Tellegen & Atkinson, 1974) also report more spiritual experiences.
Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using absorption scores to predict reports of spiritual experiences, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ absorption * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). Our prediction is that the main effect of absorption on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)
If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ absorption * scale + (1 | site/subject)."
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.03 |
0.03 |
495 |
1.12 |
0.263 |
|
| abs |
0.21 |
0.03 |
495 |
6.55 |
<0.001 |
* |
| p7_ctry1 |
-0.32 |
0.06 |
495 |
-5.44 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.06 |
495 |
13.58 |
<0.001 |
* |
| p7_ctry3 |
-0.11 |
0.06 |
495 |
-1.78 |
0.075 |
|
| p7_ctry4 |
-0.95 |
0.06 |
495 |
-15.26 |
<0.001 |
* |
| scale1 |
0.00 |
0.02 |
495 |
-0.17 |
0.863 |
|
| abs:p7_ctry1 |
0.04 |
0.05 |
495 |
0.72 |
0.474 |
|
| abs:p7_ctry2 |
-0.01 |
0.07 |
495 |
-0.18 |
0.86 |
|
| abs:p7_ctry3 |
0.12 |
0.07 |
495 |
1.79 |
0.073 |
|
| abs:p7_ctry4 |
-0.04 |
0.07 |
495 |
-0.60 |
0.551 |
|
| abs:scale1 |
-0.03 |
0.02 |
495 |
-1.52 |
0.129 |
|
| p7_ctry1:scale1 |
-0.06 |
0.03 |
495 |
-1.86 |
0.064 |
|
| p7_ctry2:scale1 |
0.04 |
0.03 |
495 |
1.14 |
0.255 |
|
| p7_ctry3:scale1 |
0.07 |
0.04 |
495 |
1.99 |
0.047 |
* |
| p7_ctry4:scale1 |
-0.18 |
0.04 |
495 |
-4.90 |
<0.001 |
* |
| abs:p7_ctry1:scale1 |
-0.03 |
0.03 |
495 |
-0.88 |
0.381 |
|
| abs:p7_ctry2:scale1 |
-0.03 |
0.04 |
495 |
-0.68 |
0.499 |
|
| abs:p7_ctry3:scale1 |
0.00 |
0.04 |
495 |
-0.01 |
0.992 |
|
| abs:p7_ctry4:scale1 |
0.04 |
0.04 |
495 |
0.87 |
0.387 |
|
We found evidence in favor of Hypothesis #1: As predicted, the main effect of absorption was significantly positive (see bolded row in table above).
For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.21 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 3.46 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.16 points on the Spiritual Events scale (range: 0-80).

Hypothesis #2
Hypothesis #2: People who score higher on our two porosity indices also report more spiritual experiences.
Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using porosity scores (from each of our two indices) to predict reports of spiritual experiences across the 2 spiritual experience scales included in our survey packet, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ porosity * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). We will run two versions of this model, one using each of the two “porosity” measures described above. For each regression, our prediction is that the main effect of porosity on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)
If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ porosity * scale + (1 | site/subject)."
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.07 |
0.04 |
495 |
1.80 |
0.073 |
|
| por |
0.38 |
0.04 |
495 |
10.20 |
<0.001 |
* |
| p7_ctry1 |
-0.19 |
0.06 |
495 |
-3.17 |
0.002 |
* |
| p7_ctry2 |
0.58 |
0.07 |
495 |
8.56 |
<0.001 |
* |
| p7_ctry3 |
-0.17 |
0.06 |
495 |
-2.74 |
0.006 |
* |
| p7_ctry4 |
-0.59 |
0.08 |
495 |
-7.34 |
<0.001 |
* |
| scale1 |
0.01 |
0.02 |
495 |
0.39 |
0.694 |
|
| por:p7_ctry1 |
0.20 |
0.06 |
495 |
3.25 |
0.001 |
* |
| por:p7_ctry2 |
-0.08 |
0.07 |
495 |
-1.17 |
0.245 |
|
| por:p7_ctry3 |
0.00 |
0.07 |
495 |
0.05 |
0.963 |
|
| por:p7_ctry4 |
0.04 |
0.08 |
495 |
0.54 |
0.59 |
|
| por:scale1 |
0.00 |
0.02 |
495 |
0.14 |
0.89 |
|
| p7_ctry1:scale1 |
-0.08 |
0.04 |
495 |
-2.06 |
0.04 |
* |
| p7_ctry2:scale1 |
0.11 |
0.04 |
495 |
2.48 |
0.014 |
* |
| p7_ctry3:scale1 |
0.07 |
0.04 |
495 |
1.88 |
0.06 |
|
| p7_ctry4:scale1 |
-0.12 |
0.05 |
495 |
-2.40 |
0.017 |
* |
| por:p7_ctry1:scale1 |
-0.03 |
0.04 |
495 |
-0.75 |
0.456 |
|
| por:p7_ctry2:scale1 |
-0.14 |
0.04 |
495 |
-3.29 |
0.001 |
* |
| por:p7_ctry3:scale1 |
-0.01 |
0.05 |
495 |
-0.15 |
0.878 |
|
| por:p7_ctry4:scale1 |
0.08 |
0.05 |
495 |
1.62 |
0.106 |
|
And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.06 |
0.03 |
495 |
1.94 |
0.053 |
|
| mm |
0.26 |
0.03 |
495 |
7.60 |
<0.001 |
* |
| p7_ctry1 |
-0.18 |
0.06 |
495 |
-2.95 |
0.003 |
* |
| p7_ctry2 |
0.66 |
0.06 |
495 |
10.31 |
<0.001 |
* |
| p7_ctry3 |
-0.26 |
0.06 |
495 |
-4.58 |
<0.001 |
* |
| p7_ctry4 |
-0.75 |
0.07 |
495 |
-10.67 |
<0.001 |
* |
| scale1 |
0.01 |
0.02 |
495 |
0.39 |
0.693 |
|
| mm:p7_ctry1 |
0.20 |
0.06 |
495 |
3.57 |
<0.001 |
* |
| mm:p7_ctry2 |
-0.07 |
0.06 |
495 |
-1.20 |
0.23 |
|
| mm:p7_ctry3 |
-0.01 |
0.06 |
495 |
-0.14 |
0.888 |
|
| mm:p7_ctry4 |
0.05 |
0.08 |
495 |
0.64 |
0.521 |
|
| mm:scale1 |
-0.04 |
0.02 |
495 |
-2.14 |
0.033 |
* |
| p7_ctry1:scale1 |
-0.11 |
0.04 |
495 |
-3.11 |
0.002 |
* |
| p7_ctry2:scale1 |
0.10 |
0.04 |
495 |
2.66 |
0.008 |
* |
| p7_ctry3:scale1 |
0.07 |
0.03 |
495 |
2.10 |
0.036 |
* |
| p7_ctry4:scale1 |
-0.17 |
0.04 |
495 |
-3.96 |
<0.001 |
* |
| mm:p7_ctry1:scale1 |
-0.06 |
0.03 |
495 |
-1.83 |
0.068 |
|
| mm:p7_ctry2:scale1 |
-0.09 |
0.04 |
495 |
-2.48 |
0.014 |
* |
| mm:p7_ctry3:scale1 |
0.01 |
0.04 |
495 |
0.28 |
0.778 |
|
| mm:p7_ctry4:scale1 |
0.08 |
0.05 |
495 |
1.60 |
0.111 |
|
In both cases, we found evidence in favor of Hypothesis #2: As predicted, the main effect of porosity was significantly positive in both regression analyses (see bolded rows in tables above).
For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.38 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 7.47 points on the Porosity scale (range: 0-34), participants (on average) increased by 6.33 points on the Daily Spiritual Experiences scale (range: 0-70) or 5.79 points on the Spiritual Events scale (range: 0-80).
For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.26 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 4.36 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.99 points on the Spiritual Events scale (range: 0-80).


Hypothesis #3
Hypothesis #3: The positive relationship between absorption and experience is statistically significant in each field site individually.
Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #1 to assess the relationship[] between absorption and spiritual experience […] in each field site individually. For Hypothesis #3, our models will take the following form: experience ~ absorption * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.09 |
100 |
0.00 |
1 |
|
| abs |
0.30 |
0.09 |
100 |
3.40 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| abs:scale1 |
-0.06 |
0.04 |
100 |
-1.67 |
0.097 |
|
| Ghana |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| abs |
0.20 |
0.08 |
98 |
2.42 |
0.017 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| abs:scale1 |
0.00 |
0.06 |
98 |
-0.06 |
0.955 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| abs |
0.40 |
0.08 |
109 |
5.31 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
109 |
0.00 |
1 |
|
| abs:scale1 |
-0.03 |
0.05 |
109 |
-0.61 |
0.546 |
|
| China |
| (Intercept) |
0.00 |
0.09 |
98 |
0.00 |
1 |
|
| abs |
0.26 |
0.09 |
98 |
3.00 |
0.003 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.02 |
0.04 |
98 |
-0.41 |
0.684 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| abs |
0.15 |
0.08 |
90 |
1.74 |
0.085 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| abs:scale1 |
0.01 |
0.06 |
90 |
0.14 |
0.892 |
|
We found evidence in favor of Hypothesis #3 in all sites except Vanuatu: As predicted, the main effect of absorption was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (although some would consider the effect “marginally significant”; see bolded rows in table above).

(See other relevant plots under “Hypothesis #1,” above.)
Hypothesis #4
Hypothesis #4: The positive relationship between absorption and experience is statistically significant in each field site individually.
Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #2 to assess the relationship[…] between porosity and experience in each field site individually. […] For Hypothesis #4, our models will take the following form: experience ~ porosity * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| por |
0.54 |
0.07 |
100 |
7.30 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| por:scale1 |
-0.02 |
0.04 |
100 |
-0.49 |
0.628 |
|
| Ghana |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| por |
0.29 |
0.08 |
98 |
3.64 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por:scale1 |
-0.06 |
0.06 |
98 |
-1.04 |
0.303 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| por |
0.41 |
0.07 |
109 |
5.52 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| por:scale1 |
0.00 |
0.05 |
109 |
0.10 |
0.917 |
|
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por |
0.54 |
0.07 |
98 |
7.34 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.05 |
0.04 |
98 |
1.14 |
0.257 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| por |
0.19 |
0.08 |
90 |
2.25 |
0.027 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| por:scale1 |
0.11 |
0.06 |
90 |
1.83 |
0.07 |
|
Using the Porosity scale, We found evidence in favor of Hypothesis #4 in all sites: As predicted, the main effect of porosity was significantly positive in the US, Ghana, Thailand, China, and Vanuatu (see bolded rows in table above).

And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.08 |
100 |
0.00 |
1 |
|
| mm |
0.49 |
0.08 |
100 |
6.36 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| mm:scale1 |
-0.11 |
0.04 |
100 |
-2.93 |
0.004 |
* |
| Ghana |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| mm |
0.20 |
0.08 |
98 |
2.42 |
0.017 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| mm:scale1 |
-0.10 |
0.06 |
98 |
-1.88 |
0.062 |
|
| Thailand |
| (Intercept) |
0.00 |
0.08 |
109 |
0.00 |
1 |
|
| mm |
0.33 |
0.08 |
109 |
4.17 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
109 |
0.00 |
1 |
|
| mm:scale1 |
-0.04 |
0.05 |
109 |
-0.83 |
0.411 |
|
| China |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| mm |
0.38 |
0.08 |
98 |
4.68 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| mm:scale1 |
0.00 |
0.04 |
98 |
0.04 |
0.968 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.09 |
90 |
0.00 |
1 |
|
| mm |
0.09 |
0.09 |
90 |
1.07 |
0.288 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| mm:scale1 |
0.03 |
0.06 |
90 |
0.48 |
0.632 |
|
Using the Martha Story scale, We found evidence in favor of Hypothesis #4 in all sites except Vanuatu: As predicted, the main effect of Martha Story was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (see bolded rows in table above).

(See other relevant plots under “Hypothesis #2,” above.)
Secondary exploratory analyses
“Secular” experiences
From preregistration: “First, in order to explore the question of whether affirmation of spiritual experience, porosity and absorption are simply due to the religiosity of participants, we will conduct additional analyses focusing on the two “secular” experience scales (the revised Launay Slade scale, Morrison, Wells and Nothard 2000]; and the Sheep-Goat [paranormal] scale, Thalborne & Delin, 1993). These analyses will be identical to the primary analyses outlined above, except that they will only include these two “secular experience” scales and not the two spiritual experience scales. We consider these to be exploratory analyses.”
Parallel to Hypothesis #1
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.01 |
0.03 |
495 |
0.34 |
0.731 |
|
| abs |
0.36 |
0.03 |
495 |
10.70 |
<0.001 |
* |
| p7_ctry1 |
0.14 |
0.06 |
495 |
2.26 |
0.025 |
* |
| p7_ctry2 |
0.24 |
0.06 |
495 |
3.74 |
<0.001 |
* |
| p7_ctry3 |
-0.05 |
0.07 |
495 |
-0.74 |
0.457 |
|
| p7_ctry4 |
-0.23 |
0.07 |
495 |
-3.44 |
<0.001 |
* |
| scale1 |
0.00 |
0.03 |
495 |
0.06 |
0.949 |
|
| abs:p7_ctry1 |
0.10 |
0.06 |
495 |
1.83 |
0.068 |
|
| abs:p7_ctry2 |
-0.05 |
0.07 |
495 |
-0.75 |
0.451 |
|
| abs:p7_ctry3 |
0.06 |
0.07 |
495 |
0.79 |
0.431 |
|
| abs:p7_ctry4 |
0.04 |
0.07 |
495 |
0.50 |
0.617 |
|
| abs:scale1 |
-0.01 |
0.03 |
495 |
-0.36 |
0.722 |
|
| p7_ctry1:scale1 |
-0.25 |
0.05 |
495 |
-4.79 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.09 |
0.05 |
495 |
-1.62 |
0.107 |
|
| p7_ctry3:scale1 |
0.19 |
0.06 |
495 |
3.37 |
<0.001 |
* |
| p7_ctry4:scale1 |
0.08 |
0.06 |
495 |
1.41 |
0.16 |
|
| abs:p7_ctry1:scale1 |
0.00 |
0.05 |
495 |
0.00 |
0.999 |
|
| abs:p7_ctry2:scale1 |
-0.05 |
0.06 |
495 |
-0.85 |
0.398 |
|
| abs:p7_ctry3:scale1 |
0.04 |
0.06 |
495 |
0.71 |
0.481 |
|
| abs:p7_ctry4:scale1 |
0.01 |
0.06 |
495 |
0.11 |
0.914 |
|
In parallel to Hypothesis #1, the relationship between absorption and secular experience was also significantly positive (see bolded row table above).
For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.36 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 1.16 points on the Uncommon Events scale (range: 0-18) or 0.73 points on the Extrasensory scale (range: 0-7).
This was actually a (numerically) stronger effect than what we documented for spiritual experiences (b = 0.36 vs. b = 0.21). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #2
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.10 |
0.04 |
495 |
2.36 |
0.019 |
* |
| por |
0.45 |
0.04 |
495 |
10.66 |
<0.001 |
* |
| p7_ctry1 |
0.22 |
0.07 |
495 |
3.21 |
0.001 |
* |
| p7_ctry2 |
0.04 |
0.08 |
495 |
0.53 |
0.596 |
|
| p7_ctry3 |
-0.21 |
0.07 |
495 |
-3.01 |
0.003 |
* |
| p7_ctry4 |
0.38 |
0.09 |
495 |
4.06 |
<0.001 |
* |
| scale1 |
0.10 |
0.04 |
495 |
2.79 |
0.005 |
* |
| por:p7_ctry1 |
0.24 |
0.07 |
495 |
3.38 |
<0.001 |
* |
| por:p7_ctry2 |
-0.28 |
0.07 |
495 |
-3.77 |
<0.001 |
* |
| por:p7_ctry3 |
-0.08 |
0.08 |
495 |
-0.96 |
0.339 |
|
| por:p7_ctry4 |
0.26 |
0.09 |
495 |
2.85 |
0.005 |
* |
| por:scale1 |
0.14 |
0.03 |
495 |
3.98 |
<0.001 |
* |
| p7_ctry1:scale1 |
-0.33 |
0.06 |
495 |
-5.79 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.20 |
0.06 |
495 |
-3.06 |
0.002 |
* |
| p7_ctry3:scale1 |
0.15 |
0.06 |
495 |
2.62 |
0.009 |
* |
| p7_ctry4:scale1 |
0.35 |
0.08 |
495 |
4.59 |
<0.001 |
* |
| por:p7_ctry1:scale1 |
-0.09 |
0.06 |
495 |
-1.53 |
0.127 |
|
| por:p7_ctry2:scale1 |
-0.12 |
0.06 |
495 |
-1.93 |
0.054 |
|
| por:p7_ctry3:scale1 |
0.08 |
0.07 |
495 |
1.16 |
0.248 |
|
| por:p7_ctry4:scale1 |
0.33 |
0.07 |
495 |
4.45 |
<0.001 |
* |
And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.09 |
0.04 |
495 |
2.53 |
0.012 |
* |
| mm |
0.31 |
0.04 |
495 |
7.92 |
<0.001 |
* |
| p7_ctry1 |
0.27 |
0.07 |
495 |
3.85 |
<0.001 |
* |
| p7_ctry2 |
0.05 |
0.07 |
495 |
0.65 |
0.515 |
|
| p7_ctry3 |
-0.30 |
0.06 |
495 |
-4.64 |
<0.001 |
* |
| p7_ctry4 |
0.10 |
0.08 |
495 |
1.29 |
0.198 |
|
| scale1 |
0.05 |
0.03 |
495 |
1.56 |
0.118 |
|
| mm:p7_ctry1 |
0.29 |
0.06 |
495 |
4.48 |
<0.001 |
* |
| mm:p7_ctry2 |
-0.12 |
0.07 |
495 |
-1.83 |
0.067 |
|
| mm:p7_ctry3 |
-0.08 |
0.07 |
495 |
-1.07 |
0.284 |
|
| mm:p7_ctry4 |
0.22 |
0.10 |
495 |
2.27 |
0.023 |
* |
| mm:scale1 |
0.06 |
0.03 |
495 |
1.85 |
0.065 |
|
| p7_ctry1:scale1 |
-0.30 |
0.06 |
495 |
-5.29 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.08 |
0.06 |
495 |
-1.39 |
0.165 |
|
| p7_ctry3:scale1 |
0.15 |
0.05 |
495 |
2.80 |
0.005 |
* |
| p7_ctry4:scale1 |
0.19 |
0.07 |
495 |
2.93 |
0.004 |
* |
| mm:p7_ctry1:scale1 |
-0.06 |
0.05 |
495 |
-1.09 |
0.276 |
|
| mm:p7_ctry2:scale1 |
-0.15 |
0.05 |
495 |
-2.69 |
0.007 |
* |
| mm:p7_ctry3:scale1 |
0.05 |
0.06 |
495 |
0.92 |
0.356 |
|
| mm:p7_ctry4:scale1 |
0.24 |
0.08 |
495 |
3.11 |
0.002 |
* |
In parallel to Hypothesis #2, in both cases, the relationship between porosity and secular experience was significantly positive (see bolded rows in tables above).
For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.45 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 7.47 points on the Porosity scale (range: 0-34), participants (on average) increased by 1.45 points on the Uncommon Events scale (range: 0-18) or 0.91 points on the Extrasensory scale (range: 0-7).
For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.31 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 0.99 points on the Uncommon Events scale (range: 0-18) or 0.62 points on the Extrasensory scale (range: 0-7).
These were actually (numerically) stronger effects than what we documented for spiritual experiences (Porosity: b = 0.45 vs. b = 0.38; Martha Story: b = 0.31 vs. b = 0.26). We did not provide a prediction about whether or not this would be the case in the preregistration.


Parallel to Hypothesis #3
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| abs |
0.46 |
0.07 |
100 |
6.50 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| abs:scale1 |
0.00 |
0.05 |
100 |
0.09 |
0.93 |
|
| Ghana |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs |
0.28 |
0.07 |
98 |
4.02 |
<0.001 |
* |
| scale1 |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.04 |
0.07 |
98 |
-0.55 |
0.583 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| abs |
0.41 |
0.07 |
109 |
6.03 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
109 |
0.00 |
1 |
|
| abs:scale1 |
0.02 |
0.06 |
109 |
0.40 |
0.693 |
|
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs |
0.36 |
0.07 |
98 |
5.12 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.07 |
0.06 |
98 |
-1.13 |
0.263 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| abs |
0.27 |
0.08 |
90 |
3.37 |
0.001 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| abs:scale1 |
-0.02 |
0.06 |
90 |
-0.37 |
0.709 |
|
In parallel to Hypothesis #3, the relationship between absorption and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #1,” above.)
Parallel to Hypothesis #4
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| por |
0.53 |
0.07 |
100 |
8.03 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| por:scale1 |
0.06 |
0.05 |
100 |
1.07 |
0.286 |
|
| Ghana |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por |
0.15 |
0.07 |
98 |
2.10 |
0.038 |
* |
| scale1 |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.03 |
0.07 |
98 |
0.41 |
0.685 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| por |
0.32 |
0.07 |
109 |
4.37 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| por:scale1 |
0.18 |
0.05 |
109 |
3.37 |
0.001 |
* |
| China |
| (Intercept) |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por |
0.46 |
0.06 |
98 |
7.13 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.25 |
0.06 |
98 |
4.31 |
<0.001 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| por |
0.23 |
0.08 |
90 |
2.80 |
0.006 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| por:scale1 |
-0.05 |
0.06 |
90 |
-0.87 |
0.384 |
|
In parallel to Hypothesis #4, using the Porosity (Dulin) scale, the relationship between porosity and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| mm |
0.52 |
0.07 |
100 |
7.82 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| mm:scale1 |
0.02 |
0.05 |
100 |
0.35 |
0.726 |
|
| Ghana |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm |
0.19 |
0.07 |
98 |
2.66 |
0.009 |
* |
| scale1 |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm:scale1 |
-0.08 |
0.07 |
98 |
-1.18 |
0.242 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| mm |
0.24 |
0.07 |
109 |
3.16 |
0.002 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| mm:scale1 |
0.11 |
0.05 |
109 |
2.02 |
0.046 |
* |
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm |
0.33 |
0.07 |
98 |
4.58 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| mm:scale1 |
0.14 |
0.06 |
98 |
2.30 |
0.024 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| mm |
0.01 |
0.08 |
90 |
0.06 |
0.95 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| mm:scale1 |
-0.03 |
0.06 |
90 |
-0.47 |
0.636 |
|
In parallel to Hypothesis #4, using the Martha Story scale, the relationship between porosity and secular experience was significantly positive in all sites except Vanuatu (where the relationship with spiritual experience was also not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #2,” above.)
“Control” scales (Hypothesis #5)
From preregistration: “Second, in order to examine whether the hypothesized relationships between absorption and experience and between porosity and experience can be explained by a lower-level processes—namely, individual or cross-cultural differences in an overall tendency to agree with the questions posed by these scales (i.e., a “yes” bias), we will also examine the relationships between the two “control” scales (the Sense of Control scale, Lachman & Weaver, 1998; and the Need for Cognition scale, Cacioppo, Petty, & Kao, 1993) and our measures of absorption, porosity, and experience. This provides something of a negative control for our primary hypotheses. Our prediction is that any relationships with these control measures will be weaker than the relationships among absorption, porosity, and experience. To assess this, we will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using scores on absorption, porosity, and control scales to predict reports of spiritual experiences. Using the “stats” package for R, we will specify this model as follows: experience ~ score * predictor * site + (1 | subject), where “site” is a categorical variable comparing the five field sites (effect-coded), and—critically—“predictor” is a categorical variable with the following orthogonal contrasts: (1) Scales of interest (absorption and the two porosity measures) vs. control scales; (2) absorption vs. porosity measures; (3) porosity as indexed by the Dulin scale vs. porosity as indexed by the Mental Causation scale; (4) Need for Cognition vs. Need for Control (Mastery Subscale). Because of the unusual and complex formulation of this model—considering each of these 5 “predictors” as repeated observations of the variable “score”—we will conduct separate models for the two spiritual experience scales (Daily Spiritual Experiences and Spiritual Events), rather than incorporating both spiritual experiences measures into the same model (as in Hypotheses #1-4). As in Hypotheses #1-4, if we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ score * predictor + (1 | site/subject). We consider these to be confirmatory tests, and in each case our prediction is that the two-way interaction between “score” and the first orthogonal contrast on “predictor” (comparing the predictive power of our scales of interest vs. our two control scales) will be significantly positive (b > 0, t > 2, p < 0.05).”
Although we did not number this hypothesis in the preregistration, I’m going to go ahead and call it Hypothesis #5.
NOTE: Neither of the models we specified in the preregistration were able to run. I think this is due to an error in my thinking (about which of our measures were “repeated measures”). The models reported here are very close to what we preregistered.
Here are our results using the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.03 |
0.02 |
1.95 |
0.051 |
|
| score |
0.17 |
0.02 |
9.61 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
1.97 |
0.048 |
* |
| predictorabs_pmm |
-0.01 |
0.01 |
-1.02 |
0.309 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.12 |
0.906 |
|
| predictorhthk_wob |
0.03 |
0.03 |
0.95 |
0.343 |
|
| p7_ctry1 |
-0.37 |
0.03 |
-12.07 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.03 |
25.22 |
<0.001 |
* |
| p7_ctry3 |
-0.11 |
0.04 |
-3.21 |
0.001 |
* |
| p7_ctry4 |
-0.96 |
0.03 |
-28.68 |
<0.001 |
* |
| score:predictorint_ctl |
0.04 |
0.01 |
5.57 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.04 |
0.01 |
-2.76 |
0.006 |
* |
| score:predictorpor_mm |
0.08 |
0.03 |
2.91 |
0.004 |
* |
| score:predictorhthk_wob |
0.02 |
0.03 |
0.72 |
0.473 |
|
| score:p7_ctry1 |
0.10 |
0.03 |
3.64 |
<0.001 |
* |
| score:p7_ctry2 |
-0.06 |
0.03 |
-1.78 |
0.075 |
|
| score:p7_ctry3 |
0.02 |
0.04 |
0.60 |
0.546 |
|
| score:p7_ctry4 |
0.02 |
0.04 |
0.53 |
0.597 |
|
| predictorint_ctl:p7_ctry1 |
0.03 |
0.01 |
2.12 |
0.034 |
* |
| predictorabs_pmm:p7_ctry1 |
-0.03 |
0.03 |
-1.24 |
0.214 |
|
| predictorpor_mm:p7_ctry1 |
0.01 |
0.05 |
0.18 |
0.855 |
|
| predictorhthk_wob:p7_ctry1 |
0.02 |
0.05 |
0.38 |
0.7 |
|
| predictorint_ctl:p7_ctry2 |
-0.01 |
0.01 |
-1.04 |
0.298 |
|
| predictorabs_pmm:p7_ctry2 |
0.04 |
0.03 |
1.35 |
0.176 |
|
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.05 |
-0.71 |
0.478 |
|
| predictorhthk_wob:p7_ctry2 |
0.01 |
0.05 |
0.30 |
0.763 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.02 |
0.22 |
0.826 |
|
| predictorabs_pmm:p7_ctry3 |
0.03 |
0.03 |
1.27 |
0.206 |
|
| predictorpor_mm:p7_ctry3 |
0.05 |
0.05 |
0.98 |
0.327 |
|
| predictorhthk_wob:p7_ctry3 |
0.01 |
0.07 |
0.14 |
0.885 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.01 |
1.43 |
0.153 |
|
| predictorabs_pmm:p7_ctry4 |
-0.10 |
0.03 |
-3.45 |
<0.001 |
* |
| predictorpor_mm:p7_ctry4 |
0.10 |
0.06 |
1.70 |
0.089 |
|
| predictorhthk_wob:p7_ctry4 |
-0.04 |
0.05 |
-0.91 |
0.361 |
|
| score:predictorint_ctl:p7_ctry1 |
0.00 |
0.01 |
0.05 |
0.959 |
|
| score:predictorabs_pmm:p7_ctry1 |
-0.05 |
0.02 |
-2.00 |
0.046 |
* |
| score:predictorpor_mm:p7_ctry1 |
0.02 |
0.05 |
0.34 |
0.733 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.07 |
0.05 |
-1.46 |
0.145 |
|
| score:predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-3.10 |
0.002 |
* |
| score:predictorabs_pmm:p7_ctry2 |
0.05 |
0.03 |
1.75 |
0.081 |
|
| score:predictorpor_mm:p7_ctry2 |
-0.03 |
0.05 |
-0.56 |
0.574 |
|
| score:predictorhthk_wob:p7_ctry2 |
-0.08 |
0.05 |
-1.64 |
0.101 |
|
| score:predictorint_ctl:p7_ctry3 |
0.01 |
0.02 |
0.56 |
0.574 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.35 |
0.177 |
|
| score:predictorpor_mm:p7_ctry3 |
0.00 |
0.05 |
-0.05 |
0.958 |
|
| score:predictorhthk_wob:p7_ctry3 |
0.04 |
0.06 |
0.59 |
0.558 |
|
| score:predictorint_ctl:p7_ctry4 |
0.03 |
0.02 |
2.13 |
0.033 |
* |
| score:predictorabs_pmm:p7_ctry4 |
-0.04 |
0.03 |
-1.38 |
0.166 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.01 |
0.06 |
-0.08 |
0.933 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.05 |
0.06 |
0.81 |
0.419 |
|
And here are our results using the Spiritual Events scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.05 |
0.02 |
2.55 |
0.011 |
* |
| score |
0.19 |
0.02 |
8.68 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.01 |
-0.03 |
0.978 |
|
| predictorabs_pmm |
-0.01 |
0.02 |
-0.39 |
0.696 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.05 |
0.963 |
|
| predictorhthk_wob |
-0.02 |
0.03 |
-0.57 |
0.57 |
|
| p7_ctry1 |
-0.20 |
0.04 |
-5.62 |
<0.001 |
* |
| p7_ctry2 |
0.67 |
0.04 |
18.12 |
<0.001 |
* |
| p7_ctry3 |
-0.26 |
0.04 |
-6.17 |
<0.001 |
* |
| p7_ctry4 |
-0.64 |
0.04 |
-16.21 |
<0.001 |
* |
| score:predictorint_ctl |
0.06 |
0.01 |
6.62 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.03 |
0.02 |
-2.02 |
0.043 |
* |
| score:predictorpor_mm |
0.03 |
0.03 |
1.03 |
0.301 |
|
| score:predictorhthk_wob |
0.08 |
0.04 |
2.29 |
0.022 |
* |
| score:p7_ctry1 |
0.12 |
0.03 |
3.42 |
<0.001 |
* |
| score:p7_ctry2 |
-0.02 |
0.04 |
-0.60 |
0.548 |
|
| score:p7_ctry3 |
0.07 |
0.04 |
1.72 |
0.085 |
|
| score:p7_ctry4 |
-0.06 |
0.04 |
-1.37 |
0.17 |
|
| predictorint_ctl:p7_ctry1 |
0.03 |
0.02 |
2.04 |
0.041 |
* |
| predictorabs_pmm:p7_ctry1 |
-0.05 |
0.03 |
-1.77 |
0.077 |
|
| predictorpor_mm:p7_ctry1 |
-0.02 |
0.06 |
-0.43 |
0.664 |
|
| predictorhthk_wob:p7_ctry1 |
0.00 |
0.06 |
-0.06 |
0.952 |
|
| predictorint_ctl:p7_ctry2 |
-0.04 |
0.02 |
-2.55 |
0.011 |
* |
| predictorabs_pmm:p7_ctry2 |
0.08 |
0.03 |
2.51 |
0.012 |
* |
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.06 |
-0.67 |
0.505 |
|
| predictorhthk_wob:p7_ctry2 |
-0.03 |
0.06 |
-0.47 |
0.641 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.02 |
0.07 |
0.942 |
|
| predictorabs_pmm:p7_ctry3 |
0.03 |
0.03 |
1.05 |
0.296 |
|
| predictorpor_mm:p7_ctry3 |
0.04 |
0.06 |
0.79 |
0.428 |
|
| predictorhthk_wob:p7_ctry3 |
-0.02 |
0.08 |
-0.27 |
0.786 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.02 |
1.21 |
0.226 |
|
| predictorabs_pmm:p7_ctry4 |
-0.08 |
0.04 |
-2.27 |
0.023 |
* |
| predictorpor_mm:p7_ctry4 |
0.06 |
0.07 |
0.80 |
0.426 |
|
| predictorhthk_wob:p7_ctry4 |
-0.01 |
0.06 |
-0.20 |
0.841 |
|
| score:predictorint_ctl:p7_ctry1 |
0.03 |
0.01 |
2.44 |
0.015 |
* |
| score:predictorabs_pmm:p7_ctry1 |
-0.06 |
0.03 |
-2.14 |
0.033 |
* |
| score:predictorpor_mm:p7_ctry1 |
-0.02 |
0.06 |
-0.31 |
0.755 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.04 |
0.06 |
-0.78 |
0.434 |
|
| score:predictorint_ctl:p7_ctry2 |
0.03 |
0.02 |
1.76 |
0.078 |
|
| score:predictorabs_pmm:p7_ctry2 |
-0.01 |
0.03 |
-0.25 |
0.801 |
|
| score:predictorpor_mm:p7_ctry2 |
0.02 |
0.06 |
0.38 |
0.707 |
|
| score:predictorhthk_wob:p7_ctry2 |
0.00 |
0.06 |
0.06 |
0.954 |
|
| score:predictorint_ctl:p7_ctry3 |
-0.02 |
0.02 |
-1.02 |
0.308 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.18 |
0.237 |
|
| score:predictorpor_mm:p7_ctry3 |
0.01 |
0.06 |
0.24 |
0.813 |
|
| score:predictorhthk_wob:p7_ctry3 |
-0.08 |
0.07 |
-1.09 |
0.276 |
|
| score:predictorint_ctl:p7_ctry4 |
0.01 |
0.02 |
0.36 |
0.722 |
|
| score:predictorabs_pmm:p7_ctry4 |
-0.01 |
0.04 |
-0.38 |
0.706 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.01 |
0.08 |
-0.08 |
0.938 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.02 |
0.07 |
0.25 |
0.805 |
|
In both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors.


“Control” scales, without reverse coding
The two control scales are the only scales that have reverse-coded items! This is really too bad, because it means that they are not actually good ways to assess a yes-bias.
In an attempt to remedy this, here I re-scoring these scales after dropping reverse-coded items.
Collapsing across sites
Here are our results using the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.03 |
0.02 |
1.94 |
0.052 |
|
| score |
0.18 |
0.02 |
10.57 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
2.16 |
0.031 |
* |
| predictorabs_pmm |
-0.01 |
0.01 |
-1.02 |
0.308 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.12 |
0.906 |
|
| predictorhthk_wob |
0.02 |
0.02 |
0.90 |
0.37 |
|
| p7_ctry1 |
-0.35 |
0.03 |
-11.84 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.03 |
26.04 |
<0.001 |
* |
| p7_ctry3 |
-0.10 |
0.03 |
-3.19 |
0.001 |
* |
| p7_ctry4 |
-0.96 |
0.03 |
-28.80 |
<0.001 |
* |
| score:predictorint_ctl |
0.04 |
0.01 |
6.03 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.04 |
0.01 |
-2.76 |
0.006 |
* |
| score:predictorpor_mm |
0.08 |
0.03 |
2.92 |
0.004 |
* |
| score:predictorhthk_wob |
0.08 |
0.03 |
3.14 |
0.002 |
* |
| score:p7_ctry1 |
0.07 |
0.03 |
2.57 |
0.01 |
* |
| score:p7_ctry2 |
-0.06 |
0.03 |
-1.95 |
0.052 |
|
| score:p7_ctry3 |
0.04 |
0.03 |
1.33 |
0.183 |
|
| score:p7_ctry4 |
0.01 |
0.04 |
0.36 |
0.721 |
|
| predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.50 |
0.135 |
|
| predictorabs_pmm:p7_ctry1 |
-0.03 |
0.03 |
-1.25 |
0.213 |
|
| predictorpor_mm:p7_ctry1 |
0.01 |
0.05 |
0.18 |
0.855 |
|
| predictorhthk_wob:p7_ctry1 |
-0.01 |
0.05 |
-0.26 |
0.795 |
|
| predictorint_ctl:p7_ctry2 |
-0.02 |
0.01 |
-1.24 |
0.217 |
|
| predictorabs_pmm:p7_ctry2 |
0.04 |
0.03 |
1.36 |
0.175 |
|
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.05 |
-0.71 |
0.477 |
|
| predictorhthk_wob:p7_ctry2 |
-0.03 |
0.05 |
-0.59 |
0.557 |
|
| predictorint_ctl:p7_ctry3 |
-0.01 |
0.01 |
-0.44 |
0.663 |
|
| predictorabs_pmm:p7_ctry3 |
0.03 |
0.03 |
1.27 |
0.204 |
|
| predictorpor_mm:p7_ctry3 |
0.05 |
0.05 |
0.98 |
0.325 |
|
| predictorhthk_wob:p7_ctry3 |
0.03 |
0.05 |
0.64 |
0.525 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.01 |
1.19 |
0.236 |
|
| predictorabs_pmm:p7_ctry4 |
-0.10 |
0.03 |
-3.46 |
<0.001 |
* |
| predictorpor_mm:p7_ctry4 |
0.10 |
0.06 |
1.71 |
0.088 |
|
| predictorhthk_wob:p7_ctry4 |
-0.04 |
0.05 |
-0.88 |
0.378 |
|
| score:predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.42 |
0.155 |
|
| score:predictorabs_pmm:p7_ctry1 |
-0.05 |
0.02 |
-2.00 |
0.045 |
* |
| score:predictorpor_mm:p7_ctry1 |
0.02 |
0.05 |
0.34 |
0.732 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.12 |
0.05 |
-2.55 |
0.011 |
* |
| score:predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-3.37 |
<0.001 |
* |
| score:predictorabs_pmm:p7_ctry2 |
0.05 |
0.03 |
1.75 |
0.08 |
|
| score:predictorpor_mm:p7_ctry2 |
-0.03 |
0.05 |
-0.56 |
0.573 |
|
| score:predictorhthk_wob:p7_ctry2 |
-0.05 |
0.04 |
-1.18 |
0.24 |
|
| score:predictorint_ctl:p7_ctry3 |
0.00 |
0.01 |
-0.19 |
0.847 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.35 |
0.176 |
|
| score:predictorpor_mm:p7_ctry3 |
0.00 |
0.05 |
-0.05 |
0.957 |
|
| score:predictorhthk_wob:p7_ctry3 |
0.00 |
0.05 |
-0.01 |
0.992 |
|
| score:predictorint_ctl:p7_ctry4 |
0.04 |
0.01 |
2.41 |
0.016 |
* |
| score:predictorabs_pmm:p7_ctry4 |
-0.04 |
0.03 |
-1.39 |
0.165 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.01 |
0.06 |
-0.08 |
0.933 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.03 |
0.06 |
0.51 |
0.609 |
|
And here are our results using the Spiritual Events scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.03 |
0.02 |
1.54 |
0.123 |
|
| score |
0.20 |
0.02 |
10.10 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
1.35 |
0.176 |
|
| predictorabs_pmm |
-0.01 |
0.02 |
-0.39 |
0.693 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.05 |
0.962 |
|
| predictorhthk_wob |
-0.01 |
0.03 |
-0.29 |
0.771 |
|
| p7_ctry1 |
-0.18 |
0.04 |
-5.22 |
<0.001 |
* |
| p7_ctry2 |
0.66 |
0.04 |
18.57 |
<0.001 |
* |
| p7_ctry3 |
-0.25 |
0.04 |
-7.22 |
<0.001 |
* |
| p7_ctry4 |
-0.62 |
0.04 |
-15.94 |
<0.001 |
* |
| score:predictorint_ctl |
0.05 |
0.01 |
6.67 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.03 |
0.02 |
-2.04 |
0.041 |
* |
| score:predictorpor_mm |
0.03 |
0.03 |
1.04 |
0.297 |
|
| score:predictorhthk_wob |
0.13 |
0.03 |
4.46 |
<0.001 |
* |
| score:p7_ctry1 |
0.10 |
0.03 |
3.07 |
0.002 |
* |
| score:p7_ctry2 |
0.00 |
0.03 |
-0.02 |
0.984 |
|
| score:p7_ctry3 |
0.07 |
0.04 |
1.71 |
0.088 |
|
| score:p7_ctry4 |
-0.07 |
0.04 |
-1.61 |
0.108 |
|
| predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.40 |
0.161 |
|
| predictorabs_pmm:p7_ctry1 |
-0.05 |
0.03 |
-1.79 |
0.074 |
|
| predictorpor_mm:p7_ctry1 |
-0.02 |
0.06 |
-0.44 |
0.661 |
|
| predictorhthk_wob:p7_ctry1 |
-0.04 |
0.06 |
-0.73 |
0.467 |
|
| predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-2.45 |
0.014 |
* |
| predictorabs_pmm:p7_ctry2 |
0.08 |
0.03 |
2.54 |
0.011 |
* |
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.06 |
-0.67 |
0.501 |
|
| predictorhthk_wob:p7_ctry2 |
-0.04 |
0.05 |
-0.69 |
0.492 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.01 |
-0.02 |
0.984 |
|
| predictorabs_pmm:p7_ctry3 |
0.03 |
0.03 |
1.06 |
0.291 |
|
| predictorpor_mm:p7_ctry3 |
0.04 |
0.06 |
0.80 |
0.423 |
|
| predictorhthk_wob:p7_ctry3 |
0.05 |
0.06 |
0.85 |
0.396 |
|
| predictorint_ctl:p7_ctry4 |
0.01 |
0.02 |
0.53 |
0.595 |
|
| predictorabs_pmm:p7_ctry4 |
-0.08 |
0.04 |
-2.29 |
0.022 |
* |
| predictorpor_mm:p7_ctry4 |
0.06 |
0.07 |
0.80 |
0.422 |
|
| predictorhthk_wob:p7_ctry4 |
-0.01 |
0.05 |
-0.26 |
0.796 |
|
| score:predictorint_ctl:p7_ctry1 |
0.04 |
0.01 |
3.03 |
0.002 |
* |
| score:predictorabs_pmm:p7_ctry1 |
-0.06 |
0.03 |
-2.15 |
0.031 |
* |
| score:predictorpor_mm:p7_ctry1 |
-0.02 |
0.05 |
-0.32 |
0.753 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.03 |
0.05 |
-0.62 |
0.534 |
|
| score:predictorint_ctl:p7_ctry2 |
0.02 |
0.01 |
1.17 |
0.241 |
|
| score:predictorabs_pmm:p7_ctry2 |
-0.01 |
0.03 |
-0.25 |
0.8 |
|
| score:predictorpor_mm:p7_ctry2 |
0.02 |
0.06 |
0.38 |
0.704 |
|
| score:predictorhthk_wob:p7_ctry2 |
0.06 |
0.05 |
1.20 |
0.232 |
|
| score:predictorint_ctl:p7_ctry3 |
-0.01 |
0.02 |
-0.94 |
0.348 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.19 |
0.233 |
|
| score:predictorpor_mm:p7_ctry3 |
0.01 |
0.06 |
0.24 |
0.812 |
|
| score:predictorhthk_wob:p7_ctry3 |
-0.11 |
0.06 |
-1.80 |
0.072 |
|
| score:predictorint_ctl:p7_ctry4 |
0.01 |
0.02 |
0.62 |
0.534 |
|
| score:predictorabs_pmm:p7_ctry4 |
-0.01 |
0.04 |
-0.38 |
0.704 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.01 |
0.08 |
-0.08 |
0.937 |
|
| score:predictorhthk_wob:p7_ctry4 |
-0.04 |
0.07 |
-0.64 |
0.523 |
|
Again, in both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors.
Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

In each site considered alone
Here I conduct a set of parallel analyses, considering each site alone.
Here are our results for the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| US |
| (Intercept) |
-0.01 |
0.04 |
-0.16 |
0.871 |
|
| score |
0.26 |
0.04 |
6.06 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.20 |
0.842 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
-0.01 |
0.07 |
-0.20 |
0.844 |
|
| score:predictorint_ctl |
0.06 |
0.02 |
3.44 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.07 |
0.04 |
-1.91 |
0.057 |
|
| score:predictorpor_mm |
0.07 |
0.07 |
1.04 |
0.298 |
|
| score:predictorhthk_wob |
-0.04 |
0.07 |
-0.53 |
0.598 |
|
| Ghana |
| (Intercept) |
-0.01 |
0.04 |
-0.21 |
0.836 |
|
| score |
0.19 |
0.04 |
4.18 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.25 |
0.801 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
0.02 |
0.984 |
|
| score:predictorint_ctl |
-0.01 |
0.02 |
-0.39 |
0.695 |
|
| score:predictorabs_pmm |
0.01 |
0.04 |
0.28 |
0.779 |
|
| score:predictorpor_mm |
0.07 |
0.07 |
0.97 |
0.331 |
|
| score:predictorhthk_wob |
0.07 |
0.07 |
0.98 |
0.326 |
|
| Thailand |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.27 |
0.04 |
6.53 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.06 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.06 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.05 |
0.02 |
2.78 |
0.006 |
* |
| score:predictorabs_pmm |
0.01 |
0.04 |
0.17 |
0.863 |
|
| score:predictorpor_mm |
0.06 |
0.06 |
0.98 |
0.327 |
|
| score:predictorhthk_wob |
0.10 |
0.06 |
1.51 |
0.132 |
|
| China |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.23 |
0.04 |
5.45 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.09 |
0.02 |
5.03 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.08 |
0.04 |
-2.10 |
0.037 |
* |
| score:predictorpor_mm |
0.10 |
0.07 |
1.49 |
0.137 |
|
| score:predictorhthk_wob |
0.14 |
0.07 |
2.12 |
0.034 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.05 |
-0.04 |
0.967 |
|
| score |
0.11 |
0.05 |
2.42 |
0.016 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.05 |
0.96 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.01 |
0.07 |
0.14 |
0.893 |
|
| score:predictorint_ctl |
0.04 |
0.02 |
2.10 |
0.036 |
* |
| score:predictorabs_pmm |
-0.02 |
0.04 |
-0.42 |
0.674 |
|
| score:predictorpor_mm |
0.09 |
0.07 |
1.22 |
0.223 |
|
| score:predictorhthk_wob |
0.27 |
0.07 |
3.67 |
<0.001 |
* |
Here are our results for the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.04 |
-0.10 |
0.919 |
|
| score |
0.31 |
0.04 |
7.58 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.12 |
0.901 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.06 |
0.00 |
1 |
|
| predictorhthk_wob |
-0.01 |
0.07 |
-0.09 |
0.925 |
|
| score:predictorint_ctl |
0.10 |
0.02 |
5.85 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.07 |
0.04 |
-1.98 |
0.048 |
* |
| score:predictorpor_mm |
-0.02 |
0.06 |
-0.33 |
0.742 |
|
| score:predictorhthk_wob |
0.10 |
0.07 |
1.54 |
0.123 |
|
| Ghana |
| (Intercept) |
-0.01 |
0.04 |
-0.23 |
0.821 |
|
| score |
0.17 |
0.04 |
3.92 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.28 |
0.782 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
-0.04 |
0.969 |
|
| score:predictorint_ctl |
0.06 |
0.02 |
3.09 |
0.002 |
* |
| score:predictorabs_pmm |
-0.04 |
0.04 |
-1.03 |
0.304 |
|
| score:predictorpor_mm |
0.02 |
0.07 |
0.31 |
0.756 |
|
| score:predictorhthk_wob |
0.20 |
0.07 |
2.84 |
0.005 |
* |
| Thailand |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.31 |
0.04 |
7.64 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.06 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.06 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.05 |
0.02 |
2.74 |
0.006 |
* |
| score:predictorabs_pmm |
0.01 |
0.04 |
0.37 |
0.708 |
|
| score:predictorpor_mm |
0.02 |
0.06 |
0.34 |
0.738 |
|
| score:predictorhthk_wob |
0.03 |
0.06 |
0.47 |
0.637 |
|
| China |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.20 |
0.04 |
4.59 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.09 |
0.02 |
5.34 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.05 |
0.04 |
-1.33 |
0.183 |
|
| score:predictorpor_mm |
0.05 |
0.07 |
0.77 |
0.444 |
|
| score:predictorhthk_wob |
0.14 |
0.07 |
2.13 |
0.033 |
* |
| Vanuatu |
| (Intercept) |
-0.01 |
0.05 |
-0.31 |
0.76 |
|
| score |
0.09 |
0.05 |
1.87 |
0.062 |
|
| predictorint_ctl |
0.01 |
0.02 |
0.37 |
0.709 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.01 |
0.07 |
0.19 |
0.851 |
|
| score:predictorint_ctl |
0.00 |
0.02 |
0.22 |
0.824 |
|
| score:predictorabs_pmm |
0.02 |
0.04 |
0.55 |
0.585 |
|
| score:predictorpor_mm |
0.01 |
0.07 |
0.12 |
0.902 |
|
| score:predictorhthk_wob |
0.23 |
0.07 |
3.07 |
0.002 |
* |
In both cases, we found evidence in favor of Hypothesis #5 in almost all sites: In most sites, as predicted the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded rows in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors. The only exceptions to this were Ghana when using the Daily Spiritual Experiences scale (first table above), and Vanuatu when using the Spiritual Events scale (second table above).



LS0tCnRpdGxlOiAiUGFja2V0IDcgKEtXIGZpcnN0IHBhc3MpIgpzdWJ0aXRsZTogIkxhc3QgdXBkYXRlZDogMjAxOS0wNC0xNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKVGhpcyBpcyBLYXJhJ3MgZmlyc3QgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBQYWNrZXQgNyBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAzLTE4KS4gKE5vdGU6IFBERiBwcmludGVkIHBvcnRyYWl0LCA4MCUgem9vbSwgbWluaW11bSBtYXJnaW5zLikKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0KZF9yYXcgPC0gcmVhZF94bHN4KCIuL2RhdGEgZnJvbSBOaWtraS9QYWNrZXQgN19DT0RFRF9NYXJjaCAxOCwgMjAxOS54bHN4IiwKICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkKYGBgCgpgYGB7cn0KdmFyX2tleSA8LSBkX3Jhd1sxLF0gJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInF1ZXN0aW9uIikgJT4lCiAgcmVuYW1lKHF1ZXN0aW9uX3RleHQgPSAiLiIpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDtCIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMOuIiwgIiAtICIsIHF1ZXN0aW9uX3RleHQpLAogICAgICAgICBxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDuiIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMO5IiwgIiciLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIlxuIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIlxyIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgbXV0YXRlKG9yZGVyID0gMTpucm93KC4pLAogICAgICAgICBzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBxdWVzdGlvbiksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gaWZlbHNlKHNjYWxlICVpbiUgYygiZW50ciIsICIyZGF5IiwgInZlciIsICJiYXRjIiwgInJlc2FtcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHJ5IiwgInN1YmoiLCAiZmlsZSIsICJyZWNyIiwgIndoZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aG9jIiksICJkYXRhX2VudHJ5Iiwgc2NhbGUpKSAlPiUKICBzZWxlY3Qob3JkZXIsIHNjYWxlLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCkgJT4lCiAgYXJyYW5nZShvcmRlcikKYGBgCgpgYGB7cn0KIyBjaGVjayBmb3IgZHVwbGljYXRlcwpkdXBsaWNhdGVzIDwtIGRfcmF3ICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCA8LSBmdWxsX2pvaW4oZF9yYXcgJT4lCiAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCFwN19zdWJqICVpbiUgZHVwbGljYXRlcyRwN19zdWJqKSksCiAgICAgICAgICAgICAgICAgZF9yYXcgJT4lIAogICAgICAgICAgICAgICAgICAgZmlsdGVyKHA3X3N1YmogJWluJSBkdXBsaWNhdGVzJHA3X3N1YmogJiBwN19iYXRjID09IDEpKQoKIyBlbGltaW5hdGUgZmlyc3Qgc2FtcGxlIGZyb20gZ2hhbmEgKHBvb3JseSBjb2xsZWN0ZWQpCmQwMCA8LSBkMDAgJT4lCiAgZmlsdGVyKCEocDdfcmVzYW1wbGUgPT0gIjEiICYgcDdfY3RyeSA9PSAiNCIpKQoKZDAwICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7cn0KZDAgPC0gZDAwWy0xLF0gJT4lICMgZ2V0IHJpZCBvZiBxdWVzdGlvbiB0ZXh0CiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoInA3X2Fic18iKSwgc3RhcnRzX3dpdGgoInA3X2RzZV8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfc2VfIiksIHN0YXJ0c193aXRoKCJwN193b2JfIiksCiAgICAgICAgICAgICAgICAgc3RhcnRzX3dpdGgoInA3X3VuZXZfIiksIHN0YXJ0c193aXRoKCJwN19leHNlbl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfaHRoa18iKSwgc3RhcnRzX3dpdGgoInA3X3Bvcl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfbW1fIiksIHA3X2RlbV9hZ2UsIHA3X2RlbV9zZXMsCiAgICAgICAgICAgICAgICAgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpLCAKICAgICAgICAgICAgZnVucyhhcy5udW1lcmljKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZGVtX2hvbHkudHVuZy5naWYpLAogICAgICAgICAgICBmdW5zKHJlY29kZV9mYWN0b3IoLiwgIjAiID0gIm5vIiwgIjEiID0gInllcyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfYWJzX2NoZWNrLCBwN19kc2VfY2hlY2ssIHA3X3NlX2NoZWNrLCBwN191bmV2X2NoZWNrLCAKICAgICAgICAgICAgICAgICBwN19leHNlbl9jaGVjaywgcDdfcG9yX2NoZWNrLCBwN19tbV9jaGVjayksCiAgICAgICAgICAgIGZ1bnMocmVjb2RlX2ZhY3RvciguLCAiMCIgPSAicGFzcyIsICIxIiA9ICJmYWlsIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19hYnNfY2hpbGQuZXhwOnA3X2Fic19zdW5zZXQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlKC4sICIwIiA9IEYsICIxIiA9IFQpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZHNlX2dvZC5wcmVzY246cDdfZHNlX2FjY2VwdC53cm9uZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSBpbiBhIHdoaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWUgZGF5cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJtb3N0IGRheXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAiZXZlcnkgZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIm1hbnkgdGltZXMgYSBkYXkiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3NlX3ZvaWNlLm91dDpwN19zZV9vd24uaGVhbGluZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJzZXZlcmFsIHRpbWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gImZhaXJseSBvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2Jfc2V0Lm1pbmRfcmV2ZXJzZTpwN193b2JfZnV0dXJlLm9uLm1lX3JldmVyc2UpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0zIiA9ICJzdHJvbmdseSBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5laXRoZXIgYWdyZWUgbm9yIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWV3aGF0IGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gInN0cm9uZ2x5IGFncmVlIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2JfbGl0dGxlLmNoYW5nZTpwN193b2JfcHVzaGVkLmFyb3VuZCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAic3Ryb25nbHkgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0yIiA9ICJzb21ld2hhdCBhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMyIgPSAic3Ryb25nbHkgYWdyZWUiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3VuZXZfdm9pY2UuYWxvdWQ6cDdfdW5ldl9zaGFkb3dzKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJuZXZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJzb21ldGltZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAib2Z0ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiYWxtb3N0IGFsd2F5cyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZXhzZW5fZXNwLmV4aXN0czpwN19leHNlbl9zZW5kLm1zZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaGFzIG5vdCBoYWQgdGhlIGV4cGVyaWVuY2UgKG5vKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJoYXMgaGFkIHRoZSBleHBlcmllbmNlICh5ZXMpIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19odGhrX2NvbXBsZXg6cDdfaHRoa19yZXNwb25zYmx0LCBwN19odGhrX2xvbmcuaHJzLAogICAgICAgICAgICAgICAgIHA3X2h0aGtfd2F5LnRvLnRvcDpwN19odGhrX25ldy5zb2x0aW9ucywKICAgICAgICAgICAgICAgICBwN19odGhrX3B1enpsZXM6cDdfaHRoa19pbnRlbC50YXNrLCBwN19odGhrX25vdC5wZXJzb25hbCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBub3QgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbGlrZSBtZSIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfaHRoa19ub3QuZnVuOnA3X2h0aGtfYXZvaWQudGhpbmssIAogICAgICAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bzpwN19odGhrX2xpbC50aG91Z2h0LCBwN19odGhrX25vdC5leGNpdGluZywKICAgICAgICAgICAgICAgICBwN19odGhrX21lbnRhbC5lZmZydDpwN19odGhrX2pvYi5kb25lKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gInNvbWV3aGF0IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBsaWtlIG1lIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19wb3JfdGhncy5ocnQsIHA3X3Bvcl93aWZpLnRoZ3M6cDdfcG9yX2FuZ3IuY250cmwsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3NwcnQuZW52eTpwN19wb3JfcmVhZC50aGdzLCBwN19wb3Jfc3RyZS5zcG9pbCwKICAgICAgICAgICAgICAgICBwN19wb3JfY29uc2x0LnVuc2VlbjpwN19wb3Jfc3Brbi5jdXJzZSwKICAgICAgICAgICAgICAgICBwN19wb3JfY3Vyc2Uuc2ljazpwN19wb3JfZmFsbC5pbi5sb3YsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3RoZ3MuaGVhbDpwN19wb3JfdmlzdWFsaXphdGlvbiksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaXQgZG9lcyBub3QgaGFwcGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIml0IG1pZ2h0IGhhcHBlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJpdCBkZWZpbml0ZWx5IGhhcHBlbnMiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3Bvcl90aGdzLmh1cnRfYTpwN19wb3JfdGhncy5odXJ0X2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX2FuZ3IuY250cmxfYTpwN19wb3JfYW5nci5jbnRybF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9yZWFkLnRoZ3NfYTpwN19wb3JfcmVhZC50aGdzX2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3N0cmUuc3BvaWxfYTpwN19wb3Jfc3RyZS5zcG9pbF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9zcGtuLmN1cnNlX2E6cDdfcG9yX3Nwa24uY3Vyc2VfYywKICAgICAgICAgICAgICAgICBwN19wb3JfZmFsbC5pbi5sb3ZfYTpwN19wb3JfZmFsbC5pbi5sb3ZfYyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiYSBsb3QiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X21tX2FuZ19mZWVsLmh1cnQ6cDdfbW1fc3BydC50aGdzLmh1cnQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5ldmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gInJhcmVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGUocDdfY3RyeSA9IHJlY29kZV9mYWN0b3IocDdfY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIlVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIkdoYW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIlRoYWlsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIkNoaW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIlZhbnVhdHUiKSwKICAgICAgICAgcDdfc3ViaiA9IGZhY3RvcihwN19zdWJqKSwKICAgICAgICAgcDdfZGVtX3NleCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NleCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJtYWxlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJmZW1hbGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIm90aGVyIiksCiAgICAgICAgIHA3X2RlbV9ydXIudXJiID0gcmVjb2RlX2ZhY3RvcihwN19kZW1fcnVyLnVyYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJydXJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAidXJiYW4iKSwKICAgICAgICAgcDdfZGVtX2FmZnJkLmJhc2ljcyA9IHJlY29kZV9mYWN0b3IocDdfZGVtX2FmZnJkLmJhc2ljcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIm5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gInllcyIpLAogICAgICAgICBwN19kZW1fc2VzX2NhdCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAibXVjaCBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0xIiA9ICJhIGxpdHRsZSBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gImFib3V0IHRoZSBzYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJhIGxpdHRsZSByaWNoZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIm11Y2ggcmljaGVyIikpICU+JQogIHNlbGVjdCgtYyhwN19lbnRyOnA3X3Jlc2FtcGxlLCBwN19maWxlOnA3X3dob2MpKSAlPiUKICBkaXN0aW5jdCgpCmBgYAoKYGBge3J9CiMgY291bnQgYW55b25lIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVja3MKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCiMgZF9mYWlsIDwtIGQwICU+JQojICAgZmlsdGVyKHA3X2Fic19jaGVjayA9PSAiZmFpbCIgfCBwN19kc2VfY2hlY2sgPT0gImZhaWwiIHwgCiMgICAgICAgICAgICBwN19zZV9jaGVjayA9PSAiZmFpbCIgfCBwN191bmV2X2NoZWNrID09ICJmYWlsIiB8IAojICAgICAgICAgICAgcDdfZXhzZW5fY2hlY2sgPT0gImZhaWwiIHwgcDdfcG9yX2NoZWNrID09ICJmYWlsIiB8CiMgICAgICAgICAgICBwN19tbV9jaGVjayA9PSAiZmFpbCIpCiMgZF9mYWlsICU+JSBjb3VudChwN19jdHJ5KQoKZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiY2hlY2siKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBhdHRlbnRpb25fY2hlY2ssIGNvbnRhaW5zKCJjaGVjayIpKSAlPiUKICBjb3VudChwN19jdHJ5LCBzY2FsZSwgYXR0ZW50aW9uX2NoZWNrKSAlPiUKICBzcHJlYWQoYXR0ZW50aW9uX2NoZWNrLCBuKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKQoKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCmQgPC0gZDAgJT4lCiAgZmlsdGVyKHA3X2Fic19jaGVjayAhPSAiZmFpbCIsIHA3X2RzZV9jaGVjayAhPSAiZmFpbCIsIHA3X3NlX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfdW5ldl9jaGVjayAhPSAiZmFpbCIsIHA3X2V4c2VuX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfcG9yX2NoZWNrICE9ICJmYWlsIiwgcDdfbW1fY2hlY2sgIT0gImZhaWwiKQpgYGAKCmBgYHtyfQojICMgY2hlY2sgY291bnRyeSBjb2RlcwojIGQgJT4lIAojICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiMgICBtdXRhdGUocDdfc3Vial9maXJzdGRpZyA9IHN1YnN0cihwN19zdWJqLCAxLCAxKSkgJT4lCiMgICBjb3VudChwN19jdHJ5LCBwN19zdWJqX2ZpcnN0ZGlnKQpgYGAKCgojIENvbmZpcm1hdG9yeSBoeXBvdGhlc2VzIChhcyBzcGVjaWZpZWQgaW4gcHJlcmVnaXN0cmF0aW9uKQoKX05PVEU6IEkgaW5jbHVkZWQgYWxsIHBhcnRpY2lwYW50cywgZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzLCBzaW5jZSB3ZSBkaWQgbm90IHNwZWNpZnkgdGhhdCB3ZSB3b3VsZCBleGNsdWRlIHBhcnRpY2lwYW50cyBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLiBBdCBzb21lIHBvaW50IHdlIHNob3VsZCB0cnkgcnVubmluZyBldmVyeXRoaW5nIG9uIHRoZSBzdWJzZXQgb2YgcGFydGljaXBhbnRzIHdobyBwYXNzZWQgYWxsIGF0dGVudGlvbiBjaGVja3MganVzdCBzbyB0aGF0IHdlIGtub3csIGJ1dCB0aGlzIGRlY3JlYXNlcyBvdXIgc2FtcGxlIHNpemVzIHByZXR0eSBkcmFtYXRpY2FsbHkuXwoKX0FMU08gTk9URTogSSBpbmNsdWRlZCBvbmx5IHRoZSBzZWNvbmQgc2FtcGxlIG9mIEdoYW5haWFuIHBhcnRpY2lwYW50cywgd2hvIHdlcmUgcmVjcnVpdGVkIGFjY29yZGluZyB0byBvdXIgc3RhbmRhcmRzIGFuZCBhcyBzcGVjaWZpZWQgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4gRm9yIHRoZSBtb3N0IHBhcnQsIGFsbCByZXN1bHRzIGFyZSB0aGUgc2FtZSB3aGVuIGluY2x1ZGluZyB0aGUgZnVsbCwgImRvdWJsZSIgc2FtcGxlIG9mIEdoYW5haWFuIHBhcnRpY2lwYW50cy5fCgpgYGB7cn0KIyBzdGFuZGFyZGl6ZSwgY29sbGFwc2luZyBhY3Jvc3MgcGFydGljaXBhbnRzCmRfc3RkIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgbXV0YXRlKHNjb3JlX3N0ZCA9IHNjYWxlKHNjb3JlLCBzY2FsZSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1zY29yZSkgJT4lCiAgc3ByZWFkKHNjYWxlLCBzY29yZV9zdGQpCmBgYAoKYGBge3J9CiMgc3RhbmRhcmRpemUsIGNvbGxhcHNpbmcgYWNyb3NzIHBhcnRpY2lwYW50cwpkX3N0ZF9ieXNpdGUgPC0gZDAgJT4lICMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgY29udGFpbnMoInRvdGFsIikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlKSAlPiUgIyBncm91cCBieSBzaXRlCiAgbXV0YXRlKHNjb3JlX3N0ZCA9IHNjYWxlKHNjb3JlLCBzY2FsZSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1zY29yZSkgJT4lCiAgc3ByZWFkKHNjYWxlLCBzY29yZV9zdGQpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMQoKX19IeXBvdGhlc2lzICMxOiBQZW9wbGUgd2hvIHNjb3JlIGhpZ2hlciBvbiB0aGUgVGVsbGVnZW4gQWJzb3JwdGlvbiBTY2FsZSAoVGVsbGVnZW4gJiBBdGtpbnNvbiwgMTk3NCkgYWxzbyByZXBvcnQgbW9yZSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJXZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUsIGNvbGxhcHNpbmcgYWNyb3NzIGZpZWxkIHNpdGVzLCBhbmQgdGhlbiBjb25kdWN0IGEgbWl4ZWQtZWZmZWN0cyBsaW5lYXIgcmVncmVzc2lvbiwgdXNpbmcgYWJzb3JwdGlvbiBzY29yZXMgdG8gcHJlZGljdCByZXBvcnRzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlcywgYWxsb3dpbmcgZm9yIGRpZmZlcmVuY2VzIGFjcm9zcyBvdXIgZml2ZSBmaWVsZCBzaXRlcyBhbmQgYWNyb3NzIHRoZSB0d28gc2NhbGVzIHdlIHVzZWQgdG8gbWVhc3VyZSBzcGlyaXR1YWwgZXhwZXJpZW5jZS4gVXNpbmcgdGhlIOKAnGxtZTTigJ0gcGFja2FnZSBmb3IgUiAoQmF0ZXMsIDIwMTgpLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNpdGUgKiBzY2FsZSArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNjYWxl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIChlZmZlY3QtY29kZWQpLCBhbmQg4oCcc2l0ZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgZml2ZSBmaWVsZCBzaXRlcyAoZWZmZWN0LWNvZGVkKS4gT3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSB1c2luZyBTYXR0ZXJ0aHdhaXRlJ3MgZGVncmVlcyBvZiBmcmVlZG9tIG1ldGhvZCBhcyBpbXBsZW1lbnRlZCBpbiB0aGUg4oCcbG1lclRlc3TigJ0gcGFja2FnZSBmb3IgUiwgS3V6bmV0c292YSwgQnJvY2tob2ZmLCAmIENocmlzdGVuc2VuLCAyMDE3KS4gKFRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGluY2x1ZGVkIGluIHRoZSBtb2RlbCB3aWxsIGJlIG9mIGdyZWF0IGludGVyZXN0IHRvIHVzLCBidXQgYXJlIGV4cGxvcmF0b3J5LikKCklmIHdlIGhhdmUgdHJvdWJsZSBmaXR0aW5nIHRoZXNlIG1vZGVscyBvciB0aGVyZSBhcmUgb3RoZXIgc2lnbnMgb2YgbW9kZWwgZml0IHByb2JsZW1zLCB3ZSB3aWxsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUgbW9kZWw6IGV4cGVyaWVuY2UgfiBhYnNvcnB0aW9uICogc2NhbGUgKyAoMSB8IHNpdGUvc3ViamVjdCkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHM6CgpgYGB7cn0KZF9zdGRfaDEgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfaDEkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDEkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIxIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2gxKQojIHN1bW1hcnkocjEpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKYGBge3J9CmgxX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDFfc3VtCmBgYAoKKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICMxKio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKHNlZSBib2xkZWQgcm93IGluIHRhYmxlIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gYWJzb3JwdGlvbiwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHN0YW5kYXJkIGRldmlhdGlvbnMgaW4gdGhlaXIgc3Bpcml0dWFsIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMV9zdW0kc3RkZXZbaDFfc3VtJHNjYWxlID09ICJhYnMiXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgQWJzb3JwdGlvbiBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAqIGgxX3N1bSRzdGRldltoMV9zdW0kc2NhbGUgPT0gImRzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChyYW5nZTogMC03MCkgb3IgYHIgKHN1bW1hcnkocjEpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zdW0kc3RkZXZbaDFfc3VtJHNjYWxlID09ICJzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtODApLgoKYGBge3J9CmgxX3Bsb3RfYSA8LSBkX3N0ZF9oMSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMTogQnkgc2l0ZSBhbmQgc2NhbGUiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMV9wbG90X2IgPC0gZF9zdGRfaDEgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMTogT3ZlcmFsbCIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDFfcGxvdF9hLCBoMV9wbG90X2IsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMgoKX19IeXBvdGhlc2lzICMyOiBQZW9wbGUgd2hvIHNjb3JlIGhpZ2hlciBvbiBvdXIgdHdvIHBvcm9zaXR5IGluZGljZXMgYWxzbyByZXBvcnQgbW9yZSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJXZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUsIGNvbGxhcHNpbmcgYWNyb3NzIGZpZWxkIHNpdGVzLCBhbmQgdGhlbiBjb25kdWN0IGEgbWl4ZWQtZWZmZWN0cyBsaW5lYXIgcmVncmVzc2lvbiwgdXNpbmcgcG9yb3NpdHkgc2NvcmVzIChmcm9tIGVhY2ggb2Ygb3VyIHR3byBpbmRpY2VzKSB0byBwcmVkaWN0IHJlcG9ydHMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2VzIGFjcm9zcyB0aGUgMiBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgaW5jbHVkZWQgaW4gb3VyIHN1cnZleSBwYWNrZXQsIGFsbG93aW5nIGZvciBkaWZmZXJlbmNlcyBhY3Jvc3Mgb3VyIGZpdmUgZmllbGQgc2l0ZXMgYW5kIGFjcm9zcyB0aGUgdHdvIHNjYWxlcyB3ZSB1c2VkIHRvIG1lYXN1cmUgc3Bpcml0dWFsIGV4cGVyaWVuY2UuIFVzaW5nIHRoZSDigJxsbWU04oCdIHBhY2thZ2UgZm9yIFIgKEJhdGVzLCAyMDE4KSwgd2Ugd2lsbCBzcGVjaWZ5IHRoaXMgbW9kZWwgYXMgZm9sbG93czogZXhwZXJpZW5jZSB+IHBvcm9zaXR5ICogc2l0ZSAqIHNjYWxlICsgKDEgfCBzdWJqZWN0KSwgd2hlcmUg4oCcc2NhbGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgKGVmZmVjdC1jb2RlZCksIGFuZCDigJxzaXRl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSBmaXZlIGZpZWxkIHNpdGVzIChlZmZlY3QtY29kZWQpLiBXZSB3aWxsIHJ1biB0d28gdmVyc2lvbnMgb2YgdGhpcyBtb2RlbCwgb25lIHVzaW5nIGVhY2ggb2YgdGhlIHR3byDigJxwb3Jvc2l0eeKAnSBtZWFzdXJlcyBkZXNjcmliZWQgYWJvdmUuIEZvciBlYWNoIHJlZ3Jlc3Npb24sIG91ciBwcmVkaWN0aW9uIGlzIHRoYXQgdGhlIG1haW4gZWZmZWN0IG9mIHBvcm9zaXR5IG9uIGV4cGVyaWVuY2Ugd2lsbCBiZSBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChiID4gMCwgdCA+IDIsIHAgPCAwLjA1IHVzaW5nIFNhdHRlcnRod2FpdGUncyBkZWdyZWVzIG9mIGZyZWVkb20gbWV0aG9kIGFzIGltcGxlbWVudGVkIGluIHRoZSDigJxsbWVyVGVzdOKAnSBwYWNrYWdlIGZvciBSLCBLdXpuZXRzb3ZhLCBCcm9ja2hvZmYsICYgQ2hyaXN0ZW5zZW4sIDIwMTcpLiAoVGhlIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMgaW5jbHVkZWQgaW4gdGhlIG1vZGVsIHdpbGwgYmUgb2YgZ3JlYXQgaW50ZXJlc3QgdG8gdXMsIGJ1dCBhcmUgZXhwbG9yYXRvcnkuKQoKSWYgd2UgaGF2ZSB0cm91YmxlIGZpdHRpbmcgdGhlc2UgbW9kZWxzIG9yIHRoZXJlIGFyZSBvdGhlciBzaWducyBvZiBtb2RlbCBmaXQgcHJvYmxlbXMsIHdlIHdpbGwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZSBtb2RlbDogZXhwZXJpZW5jZSB+IHBvcm9zaXR5ICogc2NhbGUgKyAoMSB8IHNpdGUvc3ViamVjdCkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pOgoKYGBge3J9CmRfc3RkX2gyIDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UsIHBvciwgbW0pICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9oMiRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oMiRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjJfcG9yIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2gyKQojIHN1bW1hcnkocjJfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZToKCmBgYHtyfQpyMl9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2gyKQojIHN1bW1hcnkocjJfbW0pCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKYGBge3J9CmgyX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsLCBwN19tbV90b3RhbCwKICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDJfc3VtCmBgYAoKSW4gYm90aCBjYXNlcywgKip3ZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICMyKio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIHBvcm9zaXR5IHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIGJvdGggcmVncmVzc2lvbiBhbmFseXNlcyAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSkuIAoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gInBvciJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50c1sicG9yIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJkc2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAocmFuZ2U6IDAtNzApIG9yIGByIChzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAqIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gInNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBTcGlyaXR1YWwgRXZlbnRzIHNjYWxlIChyYW5nZTogMC04MCkuIAoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gIm1tIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSAocmFuZ2U6IDAtNTQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAiZHNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGUgKHJhbmdlOiAwLTcwKSBvciBgciAoc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAic2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTgwKS4KCmBgYHtyfQpoMl9wbG90X2ExIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgRHVsaW4gUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjEgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcG9yLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGgyX3Bsb3RfYTEsIGgyX3Bsb3RfYjEsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCmBgYHtyfQpoMl9wbG90X2EyIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBNYXJ0aGEgU3Rvcnkgc2NhbGUpIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMl9wbG90X2IyIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2EyLCBoMl9wbG90X2IyLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzMKCl9fSHlwb3RoZXNpcyAjMzogVGhlIHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIGV4cGVyaWVuY2UgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5Ll9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiRm9yIGVhY2ggb2Ygb3VyIGZpdmUgZmllbGQgc2l0ZXMsIHdlIHdpbGwgc3RhbmRhcmRpemUgc2NvcmVzIG9uIGVhY2ggbWVhc3VyZSAoY29uc2lkZXJpbmcgb25seSBwYXJ0aWNpcGFudHMgZnJvbSB0aGF0IGZpZWxkIHNpdGUpLCBhbmQgdGhlbiBjb25kdWN0IHRoZSBzYW1lIGFuYWx5c2VzIHNwZWNpZmllZCBhYm92ZSBmb3IgW0h5cG90aGVzaXMgIzFdIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwW10gYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSBbLi4uXSBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5LiBGb3IgSHlwb3RoZXNpcyAjMywgb3VyIG1vZGVscyB3aWxsIHRha2UgdGhlIGZvbGxvd2luZyBmb3JtOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNjYWxlICsgKDEgfCBzdWJqZWN0KS4gWy4uLl0gQWdhaW4sIG91ciBwcmVkaWN0aW9uIGlzIHRoYXQgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gb24gZXhwZXJpZW5jZSBhbmQgb2YgZWFjaCBwb3Jvc2l0eSBtZWFzdXJlIG9uIGV4cGVyaWVuY2Ugd2lsbCBiZSBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChiID4gMCwgcCA8IDAuMDUpLiIKCkhlcmUgYXJlIG91ciByZXN1bHRzOgoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oMSA8LSBkX3N0ZF9ieXNpdGUgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMSRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjNfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjNfdXMpCmBgYAoKYGBge3J9CnIzX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHIzX2doKQpgYGAKCmBgYHtyfQpyM190aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyM190aCkKYGBgCgpgYGB7cn0KcjNfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjNfY2gpCmBgYAoKYGBge3J9CnIzX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjNfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHIzX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyM19naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjNfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHIzX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyM192dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICMzIGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1Kio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gdGhlIFVTLCBHaGFuYSwgVGhhaWxhbmQsIGFuZCBDaGluYeKAlGJ1dCB0aGlzIHdhcyBub3QgdGhlIGNhc2UgaW4gVmFudWF0dSAoYWx0aG91Z2ggc29tZSB3b3VsZCBjb25zaWRlciB0aGUgZWZmZWN0ICJtYXJnaW5hbGx5IHNpZ25pZmljYW50Ijsgc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlIGFib3ZlKS4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfc3RkX2J5c2l0ZV9oMSAlPiUKICAgICAgICAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSwgCiAgICAgICBhZXMoeCA9IGFicywgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsgCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsgCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMyIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCihTZWUgb3RoZXIgcmVsZXZhbnQgcGxvdHMgdW5kZXIgIkh5cG90aGVzaXMgIzEsIiBhYm92ZS4pCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIeXBvdGhlc2lzICM0CgpfX0h5cG90aGVzaXMgIzQ6IFRoZSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgaW4gZWFjaCBmaWVsZCBzaXRlIGluZGl2aWR1YWxseS5fXwoKUHJlcmVnaXN0ZXJlZCBhbmFseXNpczogIkZvciBlYWNoIG9mIG91ciBmaXZlIGZpZWxkIHNpdGVzLCB3ZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUgKGNvbnNpZGVyaW5nIG9ubHkgcGFydGljaXBhbnRzIGZyb20gdGhhdCBmaWVsZCBzaXRlKSwgYW5kIHRoZW4gY29uZHVjdCB0aGUgc2FtZSBhbmFseXNlcyBzcGVjaWZpZWQgYWJvdmUgZm9yIFtIeXBvdGhlc2lzICMyXSB0byBhc3Nlc3MgdGhlIHJlbGF0aW9uc2hpcFsuLi5dIGJldHdlZW4gcG9yb3NpdHkgYW5kIGV4cGVyaWVuY2UgaW4gZWFjaCBmaWVsZCBzaXRlIGluZGl2aWR1YWxseS4gWy4uLl0gRm9yIEh5cG90aGVzaXMgIzQsIG91ciBtb2RlbHMgd2lsbCB0YWtlIHRoZSBmb2xsb3dpbmcgZm9ybTogZXhwZXJpZW5jZSB+IHBvcm9zaXR5ICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLiBbLi4uXSBBZ2Fpbiwgb3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIGFuZCBvZiBlYWNoIHBvcm9zaXR5IG1lYXN1cmUgb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCBwIDwgMC4wNSkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pOgoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oNCA8LSBkX3N0ZF9ieXNpdGUgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNCRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDQkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI0X3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNF9wb3JfdXMpCmBgYAoKYGBge3J9CnI0X3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNF9wb3JfZ2gpCmBgYAoKYGBge3J9CnI0X3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNF9wb3JfdGgpCmBgYAoKYGBge3J9CnI0X3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNF9wb3JfY2gpCmBgYAoKYGBge3J9CnI0X3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI0X3Bvcl92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjRfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjRfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDQpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgNSwgOCkgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCA5LCAxMikgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAxMywgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAxNywgMjApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDE4LCA0KSksIGJvbGQgPSBUKQpgYGAKClVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSwgKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICM0IGluIGFsbCBzaXRlcyoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBtYWluIGVmZmVjdCBvZiBwb3Jvc2l0eSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgQ2hpbmEsIGFuZCBWYW51YXR1IChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDQgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcG9yLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzQgKHVzaW5nIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZToKCmBgYHtyfQpyNF9tbV91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X21tX3VzKQpgYGAKCmBgYHtyfQpyNF9tbV9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X21tX2doKQpgYGAKCmBgYHtyfQpyNF9tbV90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X21tX3RoKQpgYGAKCmBgYHtyfQpyNF9tbV9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X21tX2NoKQpgYGAKCmBgYHtyfQpyNF9tbV92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfbW1fdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI0X21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfbW1fdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI0X21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKVXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICM0IGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1Kio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIE1hcnRoYSBTdG9yeSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgYW5kIENoaW5h4oCUYnV0IHRoaXMgd2FzIG5vdCB0aGUgY2FzZSBpbiBWYW51YXR1IChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDQgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNCAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKKFNlZSBvdGhlciByZWxldmFudCBwbG90cyB1bmRlciAiSHlwb3RoZXNpcyAjMiwiIGFib3ZlLikKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgU2Vjb25kYXJ5IGV4cGxvcmF0b3J5IGFuYWx5c2VzCgojIyAiU2VjdWxhciIgZXhwZXJpZW5jZXMKCkZyb20gcHJlcmVnaXN0cmF0aW9uOiAiRmlyc3QsIGluIG9yZGVyIHRvIGV4cGxvcmUgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgYWZmaXJtYXRpb24gb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UsIHBvcm9zaXR5IGFuZCBhYnNvcnB0aW9uIGFyZSBzaW1wbHkgZHVlIHRvIHRoZSByZWxpZ2lvc2l0eSBvZiBwYXJ0aWNpcGFudHMsIHdlIHdpbGwgY29uZHVjdCBhZGRpdGlvbmFsIGFuYWx5c2VzIGZvY3VzaW5nIG9uIHRoZSB0d28g4oCcc2VjdWxhcuKAnSBleHBlcmllbmNlIHNjYWxlcyAodGhlIHJldmlzZWQgTGF1bmF5IFNsYWRlIHNjYWxlLCBNb3JyaXNvbiwgV2VsbHMgYW5kIE5vdGhhcmQgMjAwMF07IGFuZCB0aGUgU2hlZXAtR29hdCBbcGFyYW5vcm1hbF0gc2NhbGUsIFRoYWxib3JuZSAmIERlbGluLCAxOTkzKS4gVGhlc2UgYW5hbHlzZXMgd2lsbCBiZSBpZGVudGljYWwgdG8gdGhlIHByaW1hcnkgYW5hbHlzZXMgb3V0bGluZWQgYWJvdmUsIGV4Y2VwdCB0aGF0IHRoZXkgd2lsbCBvbmx5IGluY2x1ZGUgdGhlc2UgdHdvIOKAnHNlY3VsYXIgZXhwZXJpZW5jZeKAnSBzY2FsZXMgYW5kIG5vdCB0aGUgdHdvIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjYWxlcy4gV2UgY29uc2lkZXIgdGhlc2UgdG8gYmUgZXhwbG9yYXRvcnkgYW5hbHlzZXMuIgoKIyMjIFBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzEKCmBgYHtyfQpkX3N0ZF9oMV9zZWMgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgdW5ldiwgZXhzZW4sIGFicykgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKHVuZXYsIGV4c2VuKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9oMV9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDFfc2VjJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMV9zZWMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgIGRfc3RkX2gxX3NlYykKIyBzdW1tYXJ5KHIxX3NlYykKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKYGBge3J9CmgxX3NlY19zdW0gPC0gZDAgJT4lIAogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCwgcDdfdW5ldl90b3RhbCwgcDdfZXhzZW5fdG90YWwpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlKSwKICAgICAgICAgICAgc3RkZXYgPSBzZChzY29yZSkpICU+JQogIHVuZ3JvdXAoKQpoMV9zZWNfc3VtCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgX3NlY3VsYXJfIGV4cGVyaWVuY2Ugd2FzIGFsc28gc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSoqIChzZWUgYm9sZGVkIHJvdyB0YWJsZSBhYm92ZSkuCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gYWJzb3JwdGlvbiwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNlY3VsYXIgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgxX3NlY19zdW0kc3RkZXZbaDFfc2VjX3N1bSRzY2FsZSA9PSAiYWJzIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEFic29ycHRpb24gc2NhbGUgKHJhbmdlOiAwLTM0KSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgKHN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICogaDFfc2VjX3N1bSRzdGRldltoMV9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zZWNfc3VtJHN0ZGV2W2gxX3NlY19zdW0kc2NhbGUgPT0gImV4c2VuIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBFeHRyYXNlbnNvcnkgc2NhbGUgKHJhbmdlOiAwLTcpLgoKVGhpcyB3YXMgYWN0dWFsbHkgYSAobnVtZXJpY2FsbHkpIF9zdHJvbmdlcl8gZWZmZWN0IHRoYW4gd2hhdCB3ZSBkb2N1bWVudGVkIGZvciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKGIgPSBgciBzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHZzLiBiID0gYHIgc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgKS4gV2UgZGlkIG5vdCBwcm92aWRlIGEgcHJlZGljdGlvbiBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGluIHRoZSBwcmVyZWdpc3RyYXRpb24uCgpgYGB7cn0KaDFfc2VjX3Bsb3RfYSA8LSBkX3N0ZF9oMV9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMTogQnkgc2l0ZSBhbmQgc2NhbGUiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDFfc2VjX3Bsb3RfYiA8LSBkX3N0ZF9oMV9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxOiBPdmVyYWxsIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDFfc2VjX3Bsb3RfYSwgaDFfc2VjX3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMgoKSGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pOgoKYGBge3J9CmRfc3RkX2gyX3NlYyA8LSBkX3N0ZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKHVuZXYsIGV4c2VuKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9oMl9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDJfc2VjJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMl9zZWNfcG9yIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgZF9zdGRfaDJfc2VjKQojIHN1bW1hcnkocjJfc2VjX3BvcikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjJfc2VjX3BvcikkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnIyX3NlY19tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX3N0ZF9oMl9zZWMpCiMgc3VtbWFyeShyMl9zZWNfbW0pCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMl9zZWNfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICAgIHA3X3VuZXZfdG90YWwsIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDJfc2VjX3N1bQpgYGAKCkluIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzIsIGluIGJvdGggY2FzZXMsICoqdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSoqIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzZWN1bGFyIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMl9zZWNfc3VtJHN0ZGV2W2gyX3NlY19zdW0kc2NhbGUgPT0gInBvciJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJleHNlbiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRXh0cmFzZW5zb3J5IHNjYWxlIChyYW5nZTogMC03KS4KCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfc2VjX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNlY3VsYXIgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAibW0iXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChyYW5nZTogMC01NCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAqIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpUaGVzZSB3ZXJlIGFjdHVhbGx5IChudW1lcmljYWxseSkgX3N0cm9uZ2VyXyBlZmZlY3RzIHRoYW4gd2hhdCB3ZSBkb2N1bWVudGVkIGZvciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKFBvcm9zaXR5OiBiID0gYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgOyBNYXJ0aGEgU3Rvcnk6IGIgPSBgciBzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3J9CmgyX3Bsb3RfYTEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIGh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gaHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2ExLCBoMl9wbG90X2IxLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDJfcGxvdF9hMiA8LSBkX3N0ZF9oMl9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjIgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2EyLCBoMl9wbG90X2IyLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzCgpIZXJlIGFyZSBvdXIgcmVzdWx0czoKCmBgYHtyfQpkX3N0ZF9ieXNpdGVfaDFfc2VjIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMV9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxX3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjNfc2VjX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyM19zZWNfdXMpCmBgYAoKYGBge3J9CnIzX3NlY19naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjNfc2VjX2doKQpgYGAKCmBgYHtyfQpyM19zZWNfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDFfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHIzX3NlY190aCkKYGBgCgpgYGB7cn0KcjNfc2VjX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyM19zZWNfY2gpCmBgYAoKYGBge3J9CnIzX3NlY192dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyM19zZWNfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHIzX3NlY191cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyM19zZWNfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHIzX3NlY19jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBfYWxsXyBzaXRlcyoqLCBpbmNsdWRpbmcgVmFudWF0dSAod2hlcmUgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lCiAgICAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSksIAogICAgICAgYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArIAogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArIAogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMyIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNAoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oNF9zZWMgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNF9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0X3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl91cykKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICM0LCB1c2luZyB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIF9hbGxfIHNpdGVzKiosIGluY2x1ZGluZyBWYW51YXR1ICh3aGVyZSB0aGUgcmVsYXRpb25zaGlwIHdpdGggc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIF9ub3RfIHNpZ25pZmljYW50bHkgcG9zaXRpdmU7IHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6CgpgYGB7cn0KcjRfc2VjX21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV91cykKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfc2VjX21tX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX21tX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNCwgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1KiogKHdoZXJlIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzcGlyaXR1YWwgZXhwZXJpZW5jZSB3YXMgYWxzbyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAiQ29udHJvbCIgc2NhbGVzIChIeXBvdGhlc2lzICM1KQoKRnJvbSBwcmVyZWdpc3RyYXRpb246ICJTZWNvbmQsIGluIG9yZGVyIHRvIGV4YW1pbmUgd2hldGhlciB0aGUgaHlwb3RoZXNpemVkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGFuZCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBleHBlcmllbmNlIGNhbiBiZSBleHBsYWluZWQgYnkgYSBsb3dlci1sZXZlbCBwcm9jZXNzZXPigJRuYW1lbHksIGluZGl2aWR1YWwgb3IgY3Jvc3MtY3VsdHVyYWwgZGlmZmVyZW5jZXMgaW4gYW4gb3ZlcmFsbCB0ZW5kZW5jeSB0byBhZ3JlZSB3aXRoIHRoZSBxdWVzdGlvbnMgcG9zZWQgYnkgdGhlc2Ugc2NhbGVzIChpLmUuLCBhIOKAnHllc+KAnSBiaWFzKSwgd2Ugd2lsbCBhbHNvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdHdvIOKAnGNvbnRyb2zigJ0gc2NhbGVzICh0aGUgU2Vuc2Ugb2YgQ29udHJvbCBzY2FsZSwgTGFjaG1hbiAmIFdlYXZlciwgMTk5ODsgYW5kIHRoZSBOZWVkIGZvciBDb2duaXRpb24gc2NhbGUsIENhY2lvcHBvLCBQZXR0eSwgJiBLYW8sIDE5OTMpIGFuZCBvdXIgbWVhc3VyZXMgb2YgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUaGlzIHByb3ZpZGVzIHNvbWV0aGluZyBvZiBhIG5lZ2F0aXZlIGNvbnRyb2wgZm9yIG91ciBwcmltYXJ5IGh5cG90aGVzZXMuIE91ciBwcmVkaWN0aW9uIGlzIHRoYXQgYW55IHJlbGF0aW9uc2hpcHMgd2l0aCB0aGVzZSBjb250cm9sIG1lYXN1cmVzIHdpbGwgYmUgd2Vha2VyIHRoYW4gdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUbyBhc3Nlc3MgdGhpcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIHNjb3JlcyBvbiBhYnNvcnB0aW9uLCBwb3Jvc2l0eSwgYW5kIGNvbnRyb2wgc2NhbGVzIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIFVzaW5nIHRoZSDigJxzdGF0c+KAnSBwYWNrYWdlIGZvciBSLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBzaXRlICArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCksIGFuZOKAlGNyaXRpY2FsbHnigJTigJxwcmVkaWN0b3LigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3J0aG9nb25hbCBjb250cmFzdHM6ICgxKSBTY2FsZXMgb2YgaW50ZXJlc3QgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHZzLiBjb250cm9sIHNjYWxlczsgKDIpIGFic29ycHRpb24gdnMuIHBvcm9zaXR5IG1lYXN1cmVzOyAoMykgcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgRHVsaW4gc2NhbGUgdnMuIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIE1lbnRhbCBDYXVzYXRpb24gc2NhbGU7ICg0KSBOZWVkIGZvciBDb2duaXRpb24gdnMuIE5lZWQgZm9yIENvbnRyb2wgKE1hc3RlcnkgU3Vic2NhbGUpLiBCZWNhdXNlIG9mIHRoZSB1bnVzdWFsIGFuZCBjb21wbGV4IGZvcm11bGF0aW9uIG9mIHRoaXMgbW9kZWzigJRjb25zaWRlcmluZyBlYWNoIG9mIHRoZXNlIDUg4oCccHJlZGljdG9yc+KAnSBhcyByZXBlYXRlZCBvYnNlcnZhdGlvbnMgb2YgdGhlIHZhcmlhYmxlIOKAnHNjb3Jl4oCd4oCUd2Ugd2lsbCBjb25kdWN0IHNlcGFyYXRlIG1vZGVscyBmb3IgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgKERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBhbmQgU3Bpcml0dWFsIEV2ZW50cyksIHJhdGhlciB0aGFuIGluY29ycG9yYXRpbmcgYm90aCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgbWVhc3VyZXMgaW50byB0aGUgc2FtZSBtb2RlbCAoYXMgaW4gSHlwb3RoZXNlcyAjMS00KS4gQXMgaW4gSHlwb3RoZXNlcyAjMS00LCBpZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKyAoMSB8IHNpdGUvc3ViamVjdCkuIFdlIGNvbnNpZGVyIHRoZXNlIHRvIGJlIGNvbmZpcm1hdG9yeSB0ZXN0cywgYW5kIGluIGVhY2ggY2FzZSBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSB0d28td2F5IGludGVyYWN0aW9uIGJldHdlZW4g4oCcc2NvcmXigJ0gYW5kIHRoZSBmaXJzdCBvcnRob2dvbmFsIGNvbnRyYXN0IG9uIOKAnHByZWRpY3RvcuKAnSAoY29tcGFyaW5nIHRoZSBwcmVkaWN0aXZlIHBvd2VyIG9mIG91ciBzY2FsZXMgb2YgaW50ZXJlc3QgdnMuIG91ciB0d28gY29udHJvbCBzY2FsZXMpIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSkuIgoKQWx0aG91Z2ggd2UgZGlkIG5vdCBudW1iZXIgdGhpcyBoeXBvdGhlc2lzIGluIHRoZSBwcmVyZWdpc3RyYXRpb24sIEknbSBnb2luZyB0byBnbyBhaGVhZCBhbmQgY2FsbCBpdCBIeXBvdGhlc2lzICM1LgoKYGBge3J9CmRfc3RkX2g1IDwtIGZ1bGxfam9pbigKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogICAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSwKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSwgaHRoaywgd29iKSAlPiUKICAgIGdhdGhlcihwcmVkaWN0b3IsIHNjb3JlLCBjKGFicywgcG9yLCBtbSwgaHRoaywgd29iKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zdGRfaDUkcHJlZGljdG9yKSA8LSBjYmluZChpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wbW0gPSBjKDIsIDAsIC0xLCAtMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCl9OT1RFOiBOZWl0aGVyIG9mIHRoZSBtb2RlbHMgd2Ugc3BlY2lmaWVkIGluIHRoZSBwcmVyZWdpc3RyYXRpb24gd2VyZSBhYmxlIHRvIHJ1bi4gSSB0aGluayB0aGlzIGlzIGR1ZSB0byBhbiBlcnJvciBpbiBteSB0aGlua2luZyAoYWJvdXQgd2hpY2ggb2Ygb3VyIG1lYXN1cmVzIHdlcmUgInJlcGVhdGVkIG1lYXN1cmVzIikuIFRoZSBtb2RlbHMgcmVwb3J0ZWQgaGVyZSBhcmUgdmVyeSBjbG9zZSB0byB3aGF0IHdlIHByZXJlZ2lzdGVyZWQuXwoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZTogCgpgYGB7cn0KcjVfZHNlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAiZHNlIikpCiMgc3VtbWFyeShyNV9kc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X2RzZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZTogCgpgYGB7cn0KcjVfc2UgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICogcDdfY3RyeSwgCiAgICAgICAgICAgICBkX3N0ZF9oNSAlPiUgZmlsdGVyKHNjYWxlID09ICJzZSIpKQojIHN1bW1hcnkocjVfc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X3NlKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMTEsIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJzY29yZSIgYW5kIHRoZSBmaXJzdCBjb250cmFzdCBvbiB0aGUgInByZWRpY3RvciIgcGFyYW1ldGVyIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChzZWUgYm9sZGVkIHJvdyBpbiB0YWJsZXMgYWJvdmUpLCB3aGV0aGVyIGluZGV4ZWQgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIHVzaW5nIHRoZSBEU0Ugb3IgU0Ugc2NhbGVzLiBJbiBvdGhlciB3b3JkcywgdGhlICJwcmVkaWN0b3JzIG9mIGludGVyZXN0IiAoYWJzb3JwdGlvbiBhbmQgdGhlIHR3byBwb3Jvc2l0eSBtZWFzdXJlcykgd2VyZSBiZXR0ZXIgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB0aGFuIG91ciB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMuCgpgYGB7cn0KaDVfcGxvdF9hIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfcGxvdF9iIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IE92ZXJhbGwgKHVzaW5nIERTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGg1X3Bsb3RfYSwgaDVfcGxvdF9iLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDVfcGxvdF9jIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrIiwgIndvYiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlLCBwcmVkaWN0b3IpLCBjb2xzID0gdmFycyhwN19jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBCeSBzaXRlIGFuZCBwcmVkaWN0b3IgKHVzaW5nIFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoNV9wbG90X2QgPC0gZF9zdGRfaDUgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9wbG90X2MsIGg1X3Bsb3RfZCwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgIkNvbnRyb2wiIHNjYWxlcywgd2l0aG91dCByZXZlcnNlIGNvZGluZwoKVGhlIHR3byBjb250cm9sIHNjYWxlcyBhcmUgdGhlIG9ubHkgc2NhbGVzIHRoYXQgaGF2ZSByZXZlcnNlLWNvZGVkIGl0ZW1zISBUaGlzIGlzIHJlYWxseSB0b28gYmFkLCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgdGhleSBhcmUgbm90IGFjdHVhbGx5IGdvb2Qgd2F5cyB0byBhc3Nlc3MgYSB5ZXMtYmlhcy4KCkluIGFuIGF0dGVtcHQgdG8gcmVtZWR5IHRoaXMsIGhlcmUgSSByZS1zY29yaW5nIHRoZXNlIHNjYWxlcyBhZnRlciBfZHJvcHBpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtc18uCgojIyMgQ29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKCmBgYHtyfQpkX2N0bF9ub3JldiA8LSBkMCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3Viaiwgc3RhcnRzX3dpdGgoInA3X2h0aGsiKSwgc3RhcnRzX3dpdGgoInA3X3dvYiIpLAogICAgICAgICAtYyhlbmRzX3dpdGgoIl9jYXQiKSwgZW5kc193aXRoKCJfdG90YWwiKSwgY29udGFpbnMoImNoZWNrIikpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoInJldmVyc2UiKSkpICU+JSAjIGRyb3AgUTEsIFEyLCBRMywgUTQgZnJvbSB3b2IgCiAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bywgcDdfaHRoa19zbWFsLmRhaWx5LCBwN19odGhrX2xpbC50aG91Z2h0LAogICAgICAgICAgICBwN19odGhrX25vdC5leGNpdGluZywgcDdfaHRoa19tZW50YWwuZWZmcnQsIHA3X2h0aGtfam9iLmRvbmUpKSAlPiUgIyBkcm9wIFEzLCBRNCwgUTUsIFE3LCBROCwgUTksIFExMiwgUTE2LCBRMTcgZnJvbSBodGhrCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGlmZWxzZShncmVwbCgiaHRoayIsIHF1ZXN0aW9uKSwgImh0aGsiLAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIndvYiIsIHF1ZXN0aW9uKSwgIndvYiIsIE5BKSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIG11dGF0ZShzY29yZV9ub3Jldl9zdGQgPSBzY2FsZShzY29yZV9ub3Jldiwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfc3RkX2g1X25vcmV2IDwtIGZ1bGxfam9pbigKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogICAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSwKICBmdWxsX2pvaW4oCiAgICBkX3N0ZCAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICAgICAgZ2F0aGVyKHByZWRpY3Rvciwgc2NvcmUsIGMoYWJzLCBwb3IsIG1tKSksCiAgICBkX2N0bF9ub3JldiAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3Viaiwgc2NhbGUsIHNjb3JlX25vcmV2X3N0ZCkgJT4lCiAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJodGhrX25vcmV2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIndvYl9ub3JldiIpKSAlPiUKICAgICAgcmVuYW1lKHByZWRpY3RvciA9IHNjYWxlLAogICAgICAgICAgICAgc2NvcmUgPSBzY29yZV9ub3Jldl9zdGQpKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSwKICAgICAgICAgcHJlZGljdG9yID0gZmFjdG9yKHByZWRpY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXYkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXYkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3N0ZF9oNV9ub3JldiRwcmVkaWN0b3IpIDwtIGNiaW5kKGludF9jdGwgPSBjKDIsLTMsIDIsIDIsIC0zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3BtbSA9IGMoMiwgMCwgLTEsIC0xLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9yX21tID0gYygwLCAwLCAtMSwgMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0aGtfd29iID0gYygwLCAxLCAwLCAwLCAtMSkpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZTogCgpgYGB7cn0KcjVfbm9yZXZfZHNlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXYgJT4lIGZpbHRlcihzY2FsZSA9PSAiZHNlIikpCiMgc3VtbWFyeShyNV9ub3Jldl9kc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X25vcmV2X2RzZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZTogCgpgYGB7cn0KcjVfbm9yZXZfc2UgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICogcDdfY3RyeSwgCiAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2ICU+JSBmaWx0ZXIoc2NhbGUgPT0gInNlIikpCiMgc3VtbWFyeShyNV9ub3Jldl9zZSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjVfbm9yZXZfc2UpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygxMSwgYm9sZCA9IFQpCmBgYAoKQWdhaW4sIGluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJzY29yZSIgYW5kIHRoZSBmaXJzdCBjb250cmFzdCBvbiB0aGUgInByZWRpY3RvciIgcGFyYW1ldGVyIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChzZWUgYm9sZGVkIHJvdyBpbiB0YWJsZXMgYWJvdmUpLCB3aGV0aGVyIGluZGV4ZWQgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIHVzaW5nIHRoZSBEU0Ugb3IgU0Ugc2NhbGVzLiBJbiBvdGhlciB3b3JkcywgdGhlICJwcmVkaWN0b3JzIG9mIGludGVyZXN0IiAoYWJzb3JwdGlvbiBhbmQgdGhlIHR3byBwb3Jvc2l0eSBtZWFzdXJlcykgd2VyZSBiZXR0ZXIgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB0aGFuIG91ciB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMsIGV2ZW4gd2hlbiB3ZSBvbmx5IGluY2x1ZGVkIHRoZSBub24tcmV2ZXJzZS1jb2RlZCBpdGVtcyBmcm9tIHRoZSB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMuCgpgYGB7cn0KaDVfbm9yZXZfcGxvdF9hIDwtIGRfc3RkX2g1X25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlLCBwcmVkaWN0b3IpLCBjb2xzID0gdmFycyhwN19jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBCeSBzaXRlIGFuZCBwcmVkaWN0b3IgKHVzaW5nIERTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoNV9ub3Jldl9wbG90X2IgPC0gZF9zdGRfaDVfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJkc2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9ub3Jldl9wbG90X2EsIGg1X25vcmV2X3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9Cmg1X25vcmV2X3Bsb3RfYyA8LSBkX3N0ZF9oNV9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gInNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlLCBwcmVkaWN0b3IpLCBjb2xzID0gdmFycyhwN19jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBCeSBzaXRlIGFuZCBwcmVkaWN0b3IgKHVzaW5nIFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoNV9ub3Jldl9wbG90X2QgPC0gZF9zdGRfaDVfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IE92ZXJhbGwgKHVzaW5nIFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGg1X25vcmV2X3Bsb3RfYywgaDVfbm9yZXZfcGxvdF9kLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9jdGxfbm9yZXZfYnlzaXRlIDwtIGQwICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBzdGFydHNfd2l0aCgicDdfaHRoayIpLCBzdGFydHNfd2l0aCgicDdfd29iIiksCiAgICAgICAgIC1jKGVuZHNfd2l0aCgiX2NhdCIpLCBlbmRzX3dpdGgoIl90b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogIHNlbGVjdCgtYyhjb250YWlucygicmV2ZXJzZSIpKSkgJT4lICMgZHJvcCBRMSwgUTIsIFEzLCBRNCBmcm9tIHdvYiAKICBzZWxlY3QoLWMocDdfaHRoa19ub3QuZnVuLCBwN19odGhrX2xpbC5jaGFsbGVuZywgcDdfaHRoa19hdm9pZC50aGluaywKICAgICAgICAgICAgcDdfaHRoa19ocmQuaGF2LnRvLCBwN19odGhrX3NtYWwuZGFpbHksIHA3X2h0aGtfbGlsLnRob3VnaHQsCiAgICAgICAgICAgIHA3X2h0aGtfbm90LmV4Y2l0aW5nLCBwN19odGhrX21lbnRhbC5lZmZydCwgcDdfaHRoa19qb2IuZG9uZSkpICU+JSAjIGRyb3AgUTMsIFE0LCBRNSwgUTcsIFE4LCBROSwgUTEyLCBRMTYsIFExNyBmcm9tIGh0aGsKICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gaWZlbHNlKGdyZXBsKCJodGhrIiwgcXVlc3Rpb24pLCAiaHRoayIsCiAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgid29iIiwgcXVlc3Rpb24pLCAid29iIiwgTkEpKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3Viaiwgc2NhbGUpICU+JQogIHN1bW1hcmlzZShzY29yZV9ub3JldiA9IHN1bShyZXNwb25zZSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgbXV0YXRlKHNjb3JlX25vcmV2X3N0ZCA9IHNjYWxlKHNjb3JlX25vcmV2LCBzY2FsZSA9IFQpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KZF9zdGRfaDVfbm9yZXZfYnlzaXRlIDwtIGZ1bGxfam9pbigKICBkX3N0ZF9ieXNpdGUgJT4lCiAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlKSAlPiUKICAgIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSksCiAgZnVsbF9qb2luKAogICAgZF9zdGRfYnlzaXRlICU+JQogICAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBhYnMsIHBvciwgbW0pICU+JQogICAgICBnYXRoZXIocHJlZGljdG9yLCBzY29yZSwgYyhhYnMsIHBvciwgbW0pKSwKICAgIGRfY3RsX25vcmV2X2J5c2l0ZSAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3Viaiwgc2NhbGUsIHNjb3JlX25vcmV2X3N0ZCkgJT4lCiAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJodGhrX25vcmV2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIndvYl9ub3JldiIpKSAlPiUKICAgICAgcmVuYW1lKHByZWRpY3RvciA9IHNjYWxlLAogICAgICAgICAgICAgc2NvcmUgPSBzY29yZV9ub3Jldl9zdGQpKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSwKICAgICAgICAgcHJlZGljdG9yID0gZmFjdG9yKHByZWRpY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXZfYnlzaXRlJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2X2J5c2l0ZSRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2X2J5c2l0ZSRwcmVkaWN0b3IpIDwtIGNiaW5kKAogIGludF9jdGwgPSBjKDIsLTMsIDIsIDIsIC0zKSwKICBhYnNfcG1tID0gYygyLCAwLCAtMSwgLTEsIDApLAogIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogIGh0aGtfd29iID0gYygwLCAxLCAwLCAwLCAtMSkpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgZm9yIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6CgpgYGB7cn0KcjVfYnlzaXRlX25vcmV2X2RzZV91cyA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJkc2UiLCBwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV91cykKCnI1X2J5c2l0ZV9ub3Jldl9kc2VfZ2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfZ2gpCgpyNV9ieXNpdGVfbm9yZXZfZHNlX3RoIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfZHNlX3RoKQoKcjVfYnlzaXRlX25vcmV2X2RzZV9jaCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJkc2UiLCBwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV9jaCkKCnI1X2J5c2l0ZV9ub3Jldl9kc2VfdnQgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgMTEsIDIwKSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDIxLCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAzMSwgNDApICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCA0MSwgNTApICU+JQogIHJvd19zcGVjKGMoc2VxKDcsIDQ3LCAxMCkpLCBib2xkID0gVCkKYGBgCgpIZXJlIGFyZSBvdXIgcmVzdWx0cyBmb3IgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZToKCmBgYHtyfQpyNV9ieXNpdGVfbm9yZXZfc2VfdXMgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV91cykKCnI1X2J5c2l0ZV9ub3Jldl9zZV9naCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAic2UiLCBwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX2doKQoKcjVfYnlzaXRlX25vcmV2X3NlX3RoIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJzZSIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdGgpCgpyNV9ieXNpdGVfbm9yZXZfc2VfY2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9jaCkKCnI1X2J5c2l0ZV9ub3Jldl9zZV92dCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAic2UiLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCAxMCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCAxMSwgMjApICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMjEsIDMwKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDMxLCA0MCkgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDQxLCA1MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNywgNDcsIDEwKSksIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNSBpbiBhbG1vc3QgYWxsIHNpdGVzKio6IEluIG1vc3Qgc2l0ZXMsIGFzIHByZWRpY3RlZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSksIHdoZXRoZXIgaW5kZXhlZCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgdXNpbmcgdGhlIERTRSBvciBTRSBzY2FsZXMuIEluIG90aGVyIHdvcmRzLCB0aGUgInByZWRpY3RvcnMgb2YgaW50ZXJlc3QiIChhYnNvcnB0aW9uIGFuZCB0aGUgdHdvIHBvcm9zaXR5IG1lYXN1cmVzKSB3ZXJlIGJldHRlciBwcmVkaWN0b3JzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIHRoYW4gb3VyIHR3byAiY29udHJvbCIgcHJlZGljdG9ycywgZXZlbiB3aGVuIHdlIG9ubHkgaW5jbHVkZWQgdGhlIG5vbi1yZXZlcnNlLWNvZGVkIGl0ZW1zIGZyb20gdGhlIHR3byAiY29udHJvbCIgcHJlZGljdG9ycy4gVGhlIG9ubHkgZXhjZXB0aW9ucyB0byB0aGlzIHdlcmUgR2hhbmEgd2hlbiB1c2luZyB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChmaXJzdCB0YWJsZSBhYm92ZSksIGFuZCBWYW51YXR1IHdoZW4gdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHNlY29uZCB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuOCwgaW5jbHVkZSA9IFR9CmRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIiksCiAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBmaWxsID0gcHJlZF90eXBlLCBjb2xvciA9IHByZWRfdHlwZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHNjYWxlKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGZpbGwgPSBwcmVkX3R5cGUsIGNvbG9yID0gcHJlZF90eXBlKSwKICAgICAgICAgICAgICBtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCwgc2hvdy5sZWdlbmQgPSBUKSArCiAgc2NhbGVfY29sb3JfZGlzY3JldGUoKSArCiAgc2NhbGVfZmlsbF9kaXNjcmV0ZSgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgY29sb3IgPSAiUHJlZGljdG9yIHR5cGUiLCBmaWxsID0gIlByZWRpY3RvciB0eXBlIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIEJleW9uZCB0aGUgcHJlcmVnaXN0cmF0aW9uCgojIyBDb21iaW5lZCBlZmZlY3RzIG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IG9uIHNwaXJpdHVhbCBleHBlcmllbmNlcyAoYWJzb3JwdGlvbiBjb250cm9sbGluZyBmb3IgcG9yb3NpdHkgJiB2aWNlIHZlcnNhKQoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpIZXJlIEkgZXhhbWluZSBhIGJpZyBtb2RlbCwgaW4gd2hpY2ggYm90aCBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSB0b2dldGhlciBwcmVkaWN0IHNwaXJpdHVhbCBleHBlcmllbmNlcy4gVGhpcyBhbGxvd3MgdXMgdG8gbG9vayBhdCB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gY29udHJvbGxpbmcgZm9yIHBvcm9zaXR5LCB0aGUgZWZmZWN0IG9mIHBvcm9zaXR5IGNvbnRyb2xsaW5nIGZvciBhYnNvcnB0aW9uLCBhbmQgdGhlIHBvc3NpYmlsaXR5IG9mIGFuIGludGVyYWN0aW9uIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgcG9yb3NpdHkuIEkgbG9vayBhdCBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlIGFuZCBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2VwYXJhdGVseSwgYW5kIHVzZSBib3RoIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZSBhbmQgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZXMgdG8gaW5kZXggc3Bpcml0dWFsIGV4cGVyaWVuY2UuCgpgYGB7cn0KZF9zdGRfaDYgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGQgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfY3RyeSwgc2NhbGUpLCBmdW5zKGZhY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDYkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDYkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGU6IAoKYGBge3J9CnI2X3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2g2KQojIHN1bW1hcnkocjZfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNl9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDI6MywgNSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyNl9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgZF9zdGRfaDYpCiMgc3VtbWFyeShyNl9tbSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjZfbW0pJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDI6MywgNSksIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2Ugc2VlIGV2aWRlbmNlIGZvciBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBiZWluZyBwb3NpdGl2ZWx5IHJlbGF0ZWQgdG8gc3Bpcml0dWFsIGV4cGVyaWVuY2VzIGV2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIGVhY2ggb3RoZXIqKjogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlLCBjb250cm9sbGluZyBmb3IgcG9yb3NpdHk7IGFuZCB0aGUgZWZmZWN0IG9mIHBvcm9zaXR5IChhcyBpbmRleGVkIGJ5IGVpdGhlciB0aGUgRHVsaW4gc2NhbGUgb3IgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBhbHNvIHNpZ25pZmljYW50bHkgcG9zaXRpdmUsIGNvbnRyb2xsaW5nIGZvciBhYnNvcnB0aW9uLiBUaGVyZSB3YXMgbm8gc3Ryb25nIGV2aWRlbmNlIG9mIGFuIGludGVyYWN0aXZlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiBlaXRoZXIgY2FzZSAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSkuCgpgYGB7cn0KaDZfcGxvdF9hMSA8LSBkX3N0ZF9oNiAlPiUKICBhcnJhbmdlKGV4cGVyaWVuY2UpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IHBvciwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgRHVsaW4gUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIlBvcm9zaXR5IChEdWxpbikgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyfQpoNl9wbG90X2IxIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gcG9yLCBjb2xvciA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBPdmVyYWxsIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIlBvcm9zaXR5IChEdWxpbikgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKHBsb3RfZ3JpZChoNl9wbG90X2ExICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgICAgICAgICAgICAgICAgICAgaDZfcGxvdF9iMSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIHJlbF93aWR0aHMgPSBjKDIsIDEpKSwKICAgICAgICAgIGdldF9sZWdlbmQoaDZfcGxvdF9hMSksCiAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCmBgYAoKYGBge3J9Cmg2X3Bsb3RfYTIgPC0gZF9zdGRfaDYgJT4lCiAgYXJyYW5nZShleHBlcmllbmNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBtbSwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUiLAogICAgICAgeSA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyfQpoNl9wbG90X2IyIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gbW0sIGNvbG9yID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIiwKICAgICAgIHkgPSAiTWFydGhhIFN0b3J5IHNjb3JlIiwKICAgICAgIGNvbG9yID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChwbG90X2dyaWQoaDZfcGxvdF9hMiArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIGg2X3Bsb3RfYjIgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICByZWxfd2lkdGhzID0gYygyLCAxKSksCiAgICAgICAgICBnZXRfbGVnZW5kKGg2X3Bsb3RfYTIpLAogICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIEluIGVhY2ggc2l0ZSBjb25zaWRlcmVkIGFsb25lCgpIZXJlIEkgY29uZHVjdCBhIHNldCBvZiBwYXJhbGxlbCBhbmFseXNlcywgY29uc2lkZXJpbmcgZWFjaCBzaXRlIGFsb25lLgoKYGBge3J9CmRfc3RkX2g2X2J5c2l0ZSA8LSBkX3N0ZF9ieXNpdGUgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGRfYnlzaXRlICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X2N0cnksIHNjYWxlKSwgZnVucyhmYWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g2X2J5c2l0ZSRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oNl9ieXNpdGUkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGU6IAoKYGBge3J9CnI2X2J5c2l0ZV9wb3JfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfcG9yX3VzKQoKcjZfYnlzaXRlX3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfZ2gpCgpyNl9ieXNpdGVfcG9yX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl90aCkKCnI2X2J5c2l0ZV9wb3JfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfcG9yX2NoKQoKcjZfYnlzaXRlX3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjZfYnlzaXRlX3Bvcl91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgOCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA5LCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAxNywgMjQpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMjUsIDMyKSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMzMsIDQwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAzNCwgOCkpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMywgMzUsIDgpKSwgYm9sZCA9IFQpCmBgYAoKQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6IAoKYGBge3J9CnI2X2J5c2l0ZV9tbV91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjZfYnlzaXRlX21tX3VzKQoKcjZfYnlzaXRlX21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fZ2gpCgpyNl9ieXNpdGVfbW1fdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV90aCkKCnI2X2J5c2l0ZV9tbV9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX21tX2NoKQoKcjZfYnlzaXRlX21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjZfYnlzaXRlX21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfbW1fZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfbW1fdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDgpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgOSwgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMTcsIDI0KSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDI1LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDMzLCA0MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMzQsIDgpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDM1LCA4KSksIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2Ugc2VlIHNvbWUgZXZpZGVuY2UgZm9yIHBvcm9zaXR5ICJzd2FtcGluZyBvdXQiIHRoZSBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBpbiBzb21lIHNpdGVzKiosIGluY2x1ZGluZyBHaGFuYSwgQ2hpbmEsIGFuZCBWYW51YXR1IHdoZW4gcG9yb3NpdHkgaXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZTsgYW5kIHRoZSBVUywgR2hhbmEsIGFuZCBWYW51YXR1IHdoZW4gcG9yb3NpdHkgaXMgaW5kZXhlZCBieSB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChpbiBmYWN0LCBpbiB0aGlzIHNlY29uZCBzZXQgb2YgYW5hbHlzZXMsIG5laXRoZXIgQWJzb3JwdGlvbiBub3IgTWFydGhhIFN0b3J5IGVuZHMgdXAgYmVpbmcgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgaW4gR2hhbmEgb3IgVmFudWF0dSkuCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEFic29ycHRpb24gYXMgcHJpbWFyaWx5IGluZGl2aWR1YWwgZGlmZmVyZW5jZSwgcG9yb3NpdHkgYXMgcHJpbWFyaWx5IGN1bHR1cmFsIGRpZmZlcmVuY2U/CgpJbiBvdXIgdGhlb3JpemluZywgd2Ugb2Z0ZW4gYXNzdW1lIHRoYXQgYWJzb3JwdGlvbiBpcyBwcmltYXJpbHkgYW4gaW5kaXZpZHVhbCBkaWZmZXJlbmNlLCB3aGlsZSBwb3Jvc2l0eSBpcyBwcmltYXJpbHkgYSBjdWx0dXJhbCBkaWZmZXJlbmNl4oCUb3IgYXQgbGVhc3QgdGhhdCBhYnNvcnB0aW9uIGlzIG1vcmUgb2YgYW4gaW5kaXZpZHVhbCBkaWZmZXJlbmNlIHRoYW4gaXMgcG9yb3NpdHkuIERvIHdlIHNlZSBhbnkgZXZpZGVuY2Ugb2YgdGhpcyBpbiB0aGlzIGRhdGFzZXQ/CgojIyMgRG8gaW5kaXZpZHVhbHMgdmFyeSBtb3JlIGluIGFic29ycHRpb24gdGhhbiBwb3Jvc2l0eT8KClRoZSBmaXJzdCB3YXkgSSB0aG91Z2h0IG9mIHRvIGFwcHJvYWNoIHRoaXMgcXVlc3Rpb24gaXMgdG8gbG9vayBhdCB0aGUgZGVncmVlIHRvIHdoaWNoIGluZGl2aWR1YWxzIHZhcnkgaW4gZWFjaCBvZiB0aGVzZSB0aHJlZSBzY2FsZXMgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpLiBXZSB3b3VsZCBwcmVkaWN0IHRoYXQgYWJzb3JwdGlvbiB3b3VsZCB2YXJ5IG1vcmUgYWNyb3NzIGluZGl2aWR1YWxzIHRoYW4gZWl0aGVyIG9mIHRoZSBwb3Jvc2l0eSBpbmRpY2VzIChhZnRlciByZXNjbGFpbmcgYWxsIHRocmVlZSBzY2FsZXMgdG8gaGF2ZSB0aGUgc2FtZSByYW5nZSwgd2l0aGluIGVhY2ggc2l0ZSkuCgpgYGB7cn0KZF92YXJfYnlzaXRlIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19hYnNfdG90YWwsIHA3X3Bvcl90b3RhbCwgcDdfbW1fdG90YWwpICU+JQogIG11dGF0ZV9hdCh2YXJzKGNvbnRhaW5zKCJ0b3RhbCIpKSwgCiAgICAgICAgICAgIGZ1bnMoc2NhbGVzOjpyZXNjYWxlKC4sIHRvID0gYygwLCAxKSkpKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCBjKHA3X2Fic190b3RhbCwgcDdfcG9yX3RvdGFsLCBwN19tbV90b3RhbCkpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZmFjdG9yKHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUsIHA3X2N0cnkpICU+JQogIG11dGF0ZShzY29yZSA9IHNjYWxlKHNjb3JlLCBzY2FsZSA9IEYpKSAlPiUgIyBjZW50ZXIgYXQgMAogIHVuZ3JvdXAoKQpgYGAKCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJBYnNvcnB0aW9uIHZzLiBQb3Jvc2l0eSAoRHVsaW4pIikKcHJpbnQoIk92ZXJhbGwiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIikpCnByaW50KCJVUyIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iLCBwN19jdHJ5ID09ICJVUyIpKQoKcHJpbnQoIkdoYW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIkdoYW5hIikpCgpwcmludCgiVGhhaWxhbmQiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKCnByaW50KCJDaGluYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iLCBwN19jdHJ5ID09ICJDaGluYSIpKQoKcHJpbnQoIlZhbnVhdHUiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFic29ycHRpb24gdnMuIE1hcnRoYSBTdG9yeSIpCnByaW50KCJPdmVyYWxsIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIpKQpwcmludCgiVVMiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gInBvciIsIHA3X2N0cnkgPT0gIlVTIikpCgpwcmludCgiR2hhbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gInBvciIsIHA3X2N0cnkgPT0gIkdoYW5hIikpCgpwcmludCgiVGhhaWxhbmQiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gInBvciIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCgpwcmludCgiQ2hpbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gInBvciIsIHA3X2N0cnkgPT0gIkNoaW5hIikpCgpwcmludCgiVmFudWF0dSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAicG9yIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkR1bGluIHZzLiBNYXJ0aGEgU3RvcnkiKQpwcmludCgiT3ZlcmFsbCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iKSkKcHJpbnQoIlVTIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJhYnMiLCBwN19jdHJ5ID09ICJVUyIpKQoKcHJpbnQoIkdoYW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJhYnMiLCBwN19jdHJ5ID09ICJHaGFuYSIpKQoKcHJpbnQoIlRoYWlsYW5kIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJhYnMiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQoKcHJpbnQoIkNoaW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJhYnMiLCBwN19jdHJ5ID09ICJDaGluYSIpKQoKcHJpbnQoIlZhbnVhdHUiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gImFicyIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKYGBgCgpgYGB7cn0KZF92YXJfYnlzaXRlICU+JQogIGdyb3VwX2J5KHNjYWxlLCBwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UodmFyaWFuY2UgPSByb3VuZCh2YXIoc2NvcmUsIG5hLnJtID0gVCksIDMpKSAlPiUKICBhcnJhbmdlKHA3X2N0cnksIHNjYWxlKSAlPiUKICBzcHJlYWQoc2NhbGUsIHZhcmlhbmNlKQpgYGAKCkFjY29yZGluZyB0byBCYXJ0bGV0dCB0ZXN0cyBvZiBob21vZ2VuZWl0eSBvZiB2YXJpYW5jZXMsIHRoZSBvbmx5IHNpdGUgd2hlcmUgd2Ugc2VlIHRoZSBwYXR0ZXJuIHRoYXQgd2UnZCBleHBlY3QgaXMgVmFudWF0dTogSW5kaXZpZHVhbHMgZGlmZmVyZWQgc2lnbmlmaWNhbnRseSBtb3JlIGluIHRoZWlyIEFic29ycHRpb24gc2NvcmVzIHRoYW4gaW4gdGhlaXIgUG9yb3NpdHkgKER1bGluKSBzY29yZXMgb3IgTWFydGhhIFN0b3J5IHNjb3Jlcy4gSW4gQ2hpbmEsIGluZGl2aWR1YWxzIGRpZmZlcmVkIHNpZ25pZmljYW50bHkgbW9yZSBpbiB0aGVpciBBYnNvcnB0aW9uIHNjb3JlcyB0aGFuIGluIHRoZWlyIE1hcnRoYSBTdG9yeSBzY29yZXMsIGJ1dCB2YXJpYW5jZSB3YXMgZXF1YWwgYWNyb3NzIHRoZSBBYnNvcnB0aW9uIGFuZCBQb3Jvc2l0eSBzY29yZXMuIEluIEdoYW5hLCB3ZSBhY3R1YWxseSBzYXcgdGhlIHJldmVyc2UgcGF0dGVybiB0byB3aGF0IHdlJ2QgZXhwZWN0OiBJbmRpdmlkdWFscyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IF9sZXNzXyBpbiB0aGVpciBBYnNvcnB0aW9uIHNjb3JlcyB0aGFuIGluIHRoZWlyIE1hcnRoYSBTdG9yeSBzY29yZXMgKGFuZCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBBYnNvcnB0aW9uIGFuZCBQb3Jvc2l0eSAoRHVsaW4pIGFsc28gd2VudCBpbiB0aGUgc2FtZSBkaXJlY3RseSwgYWx0aG91Z2ggaXQgd2FzIG5vdCBzaWduaWZpY2FudCkuCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuMywgaW5jbHVkZSA9IFR9CmRfdmFyX2J5c2l0ZSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSAoRHVsaW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIFN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCBjb2xvciA9IHNjYWxlLCBmaWxsID0gc2NhbGUpKSArCiAgZmFjZXRfd3JhcCh+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlIiwgbmNvbCA9IDUpICsKICBnZW9tX2RlbnNpdHkocG9zaXRpb24gPSAiaWRlbnRpdHkiLCBhbHBoYSA9IDAuMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9ucyIsCiAgICAgICB4ID0gIlNjb3JlIChhZGp1c3RlZCB0byBzaGFyZSBjb21tb24gcmFuZ2UgYW5kIGJlIGNlbnRlcmVkIGF0IDAsIHdpdGhpbiBlYWNoIHNpdGUpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIsCiAgICAgICBjb2xvciA9ICJTY2FsZSIsIGZpbGwgPSAiU2NhbGUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC4zLCBpbmNsdWRlID0gVH0KZF92YXJfYnlzaXRlICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlKSAlPiUKICBzdW1tYXJpc2UodmFyaWFuY2UgPSB2YXIoc2NvcmUsIG5hLnJtID0gVCkpICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NhbGUsIHkgPSB2YXJpYW5jZSwgY29sb3IgPSBzY2FsZSkpICsKICBmYWNldF9ncmlkKH4gcDdfY3RyeSkgKwogIGdlb21fcG9pbnQoc2hvdy5sZWdlbmQgPSBGLCBzaXplID0gMykgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiVmFyaWFuY2UgYnkgc2NhbGUgYW5kIHNpdGUiLAogICAgICAgeCA9ICJTY2FsZSIsIHkgPSAiVmFyaWFuY2UgKGFmdGVyIGFkanVzdGluZyBzY29yZXNcbnRvIHNoYXJlIGNvbW1vbiByYW5nZSBhbmRcbmJlIGNlbnRlcmVkIGF0IDAsIHdpdGhpbiBlYWNoIHNpdGUiKQpgYGAKCioqTXkgdGFrZS1hd2F5IGhlcmUgaXMgdGhhdCB0aGVyZSBpcyBfbm9fIHN0cm9uZyBldmlkZW5jZSBmcm9tIHRoZXNlIGFuYWx5c2VzIG9mIGhvbW9nZW5laXR5IG9mIHZhcmlhbmNlIHRoYXQgaW5kaXZpZHVhbHMgKHdpdGhpbiBhIHNpdGUpIHZhcmllZCBtb3JlIGluIGFic29ycHRpb24gdGhhbiBpbiBwb3Jvc2l0eS4qKgoKIyMjIERvIHNpdGUgZGlmZmVyZW5jZXMgYWNjb3VudCBmb3IgbW9yZSBvZiB0aGUgdmFyaWFuY2UgaW4gcG9yb3NpdHkgdGhhbiBpbiBhYnNvcnB0aW9uPwoKVGhlIHNlY29uZCB3YXkgSSB0aG91Z2h0IG9mIHRvIGFwcHJvYWNoIHRoaXMgcXVlc3Rpb24gaXMgdG8gbG9vayBhdCB0aGUgYW1vdW50IG9mIHZhcmlhbmNlIGV4cGxhaW5lZCBieSBzaXRlIGRpZmZlcmVuY2VzIGZvciBpbiBlYWNoIG9mIHRoZXNlIHRocmVlIHNjYWxlcyAoQWJzb3JwdGlvbiwgUG9yb3NpdHkgKER1bGluKSwgYW5kIE1hcnRoYSBTdG9yeSkuIFdlIHdvdWxkIHByZWRpY3QgdGhhdCBzaXRlIGRpZmZlcmVuY2VzIHdvdWxkIGV4cGxhaW4gbW9yZSBvZiB0aGUgdmFyaWFuY2UgaW4gcG9yb3NpdHkgdGhhbiBpbiBhYnNvcnB0aW9uIChubyByZXNjYWxpbmcgbmVjZXNzYXJ5IGhlcmUpLgoKYGBge3J9CnI3X2FicyA8LSBsbShwN19hYnNfdG90YWwgfiBwN19jdHJ5LCAKICAgICAgICAgICAgIGQwICU+JSBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19hYnNfdG90YWwpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChwN19jdHJ5ID0gImNvbnRyLnN1bSIpKQoKcjdfcG9yIDwtIGxtKHA3X3Bvcl90b3RhbCB+IHA3X2N0cnksIAogICAgICAgICAgICAgZDAgJT4lIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCksCiAgICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KHA3X2N0cnkgPSAiY29udHIuc3VtIikpCgpyN19tbSA8LSBsbShwN19tbV90b3RhbCB+IHA3X2N0cnksIAogICAgICAgICAgICBkMCAlPiUgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpLAogICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KHA3X2N0cnkgPSAiY29udHIuc3VtIikpCmBgYAoKTnVtZXJpY2FsbHkgc3BlYWtpbmcsIHRoaXMgYXBwZWFycyB0byBiZSB0cnVlOiBJbiBhIHNldCBvZiBsaW5lYXIgbW9kZWxzLCBzaXRlIGRpZmZlcmVuY2VzIGV4cGxhaW4gb25seSBgciBzdW1tYXJ5KHI3X2Ficykkci5zcXVhcmVkICU+JSByb3VuZCgyKSAqIDEwMGAlIG9mIHRoZSB2YXJpYW5jZSBpbiBBYnNvcnB0aW9uIHNjb3JlcywgdnMuIGByIHN1bW1hcnkocjdfcG9yKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIFBvcm9zaXR5IChEdWxpbikgc2NvcmVzIGFuZCBgciBzdW1tYXJ5KHI3X21tKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIE1hcnRoYSBTdG9yeSBzY29yZXMuCgpIZXJlLCBJJ2xsIHRyeSB0byBjb21wYXJlIHRoZXNlIHN0YXRpc3RpY2FsbHkgKHVzaW5nIHNjb3JlcyBmb3IgZWFjaCBzY2FsZSB0aGF0IGhhdmUgYmVlbiBzdGFuZGFyZGl6ZWQsIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKToKCmBgYHtyfQpkX2g3X2NvbXBhcmUgPC0gZF9zdGQgJT4lIAogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLXN0YXJ0c193aXRoKCJwNyIpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfaDdfY29tcGFyZSRwN19jdHJ5KSA8LSBjYmluZChub25VU19VUyA9IGMoLTQsIDEsIDEsIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIVlRfVEhDSCA9IGMoMCwgMSwgLTEsIC0xLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSF9WVCA9IGMoMCwgMSwgMCwgMCwgLTEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRIX0NIID0gYygwLCAwLCAtMSwgMSwgMCkpCmNvbnRyYXN0cyhkX2g3X2NvbXBhcmUkc2NhbGUpIDwtIGNiaW5kKHBtbV9hYnMgPSBjKC0yLCAxLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9yX21tID0gYygwLCAtMSwgMSkpCgpyN19jb21wYXJlIDwtIGxtZXIoc2NvcmUgfiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCBkX2g3X2NvbXBhcmUpCiMgc3VtbWFyeShyN19jb21wYXJlKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyN19jb21wYXJlKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoODoxMSwgYm9sZCA9IFQpCmBgYAoKVGhpcyBhbmFseXNpcyBhcHBlYXJzIHRvIGJlIGNvbnNpc3RlbnQ6IEkgdGhpbmsgdGhhdCB0aGUgaW50ZXJhY3Rpb25zIHRoYXQgSSBoYXZlIGJvbGRlZCBpbiB0aGUgdGFibGUgYWJvdmUgc3VnZ2VzdCB0aGF0IHRoZSBkaWZmZXJlbmNlcyBhY3Jvc3Mgc2l0ZXMgKGhlcmUsIGNvZGVkIGFzIGRpZmZlcmVuY2VzIGJldHdlZW4gKGEpIG5vbi1VUyBhbmQgVVMgc2l0ZXMsIChiKSBHaGFuYSBhbmQgVmFudWF0dSB2cy4gVGhhaWxhbmQgYW5kIENoaW5hLCAoYykgR2hhbmEgdnMuIFZhbnVhdHUsIGFuZCAoZCkgVGhhaWxhbmQgdnMuIENoaW5hKSB3ZXJlIGdlbmVyYWxseSBleGFnZ2VyYXRlZCBpbiB0aGUgdHdvIHBvcm9zaXR5IHNjYWxlcyBjb21wYXJlZCB0byB0aGUgQWJzb3JwdGlvbiBzY2FsZSwgYW5kIHRoZXNlIHNlZW1zIHRvIGJlIHRydWUgZnJvbSB0aGUgZm9sbG93aW5nIHBsb3Q6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNSwgaW5jbHVkZSA9IFR9CmRfaDdfY29tcGFyZSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSAoRHVsaW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIFN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBzY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoLiB+IHNjYWxlKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkoc2NhbGUsIHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoInNjb3JlIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAyKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJWYXJpYWJpbGl0eSBhY3Jvc3Mgc2l0ZXMgYnkgc2NhbGUiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKKipNeSB0YWtlLWF3YXkgaGVyZSBpcyB0aGF0IHRoZXJlIF9pc18gcHJldHR5IHN0cm9uZyBldmlkZW5jZSBmcm9tIHRoZXNlIHJlc3Jlc3Npb24gYW5hbHlzZXMgdGhhdCBzaXRlIGRpZmZlcmVuY2VzIGFjY291bnRlZCBmb3IgbW9yZSBvZiB0aGUgdmFyaWFuY2UgaW4gcG9yb3NpdHkgdGhhbiBpbiBhYnNvcnB0aW9uLioqCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFJlbGlnaW9zaXR5CgojIyMgQ29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKCkRvIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgcG9yb3NpdHksIG9uIHRoZSBvbmUgaGFuZCwgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlLCBvbiB0aGUgb3RoZXIgaGFuZCwgc3RpbGwgaG9sZCBldmVuIGFmdGVyIGNvbnRyb2xsaW5nIGZvciBwYXJ0aWNpcGFudHMnIHNlbGYtcmVwb3J0ZWQgcmVsaWdpb3NpdHk/CgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuOX0KZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2hvdy5zcHJ0LnJlbGcsIHA3X2Fic190b3RhbCwgCiAgICAgICAgICAgcDdfcG9yX3RvdGFsLCBwN19tbV90b3RhbCwgcDdfZHNlX3RvdGFsLCBwN19zZV90b3RhbCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIEV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19kZW1faG93LnNwcnQucmVsZywgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiUmVsYXRpb25zaGlwcyBiZXR3ZWVuIHNlbGYtcmVwb3J0ZWQgcmVsaWdpb3NpdHkgYW5kIHNjYWxlcyBvZiBpbnRlcmVzdCIsCiAgICAgICB4ID0gIkFncmVlbWVudCB3aXRoIHRoZSBzdGF0ZW1lbnQgJ0kgY29uc2lkZXIgbXlzZWxmIGEgcmVsaWdpb3VzIG9yIHNwaXJpdHVhbCBwZXJzb24uJyIsIAogICAgICAgeSA9ICJTY29yZSIpCmBgYAoKYGBge3J9CmRfc3RkX3JlbGlnIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpICU+JQogIG11dGF0ZShyZWxpZ19zdGQgPSBzY2FsZShwN19kZW1faG93LnNwcnQucmVsZywgc2NhbGUgPSBUKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkKQoKZF9oOCA8LSBkX3N0ZF9yZWxpZyAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oOCRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX2g4JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyOF9wb3IgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKiBwN19jdHJ5ICsgCiAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgZF9oOCkKIyBzdW1tYXJ5KHI4X3BvcikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjhfcG9yKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMjo0LCBib2xkID0gVCkKYGBgCgpgYGB7cn0KcjhfbW0gPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSAqIHA3X2N0cnkgKyAKICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIGRfaDgpCiMgc3VtbWFyeShyOF9tbSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjhfbW0pJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyOjQsIGJvbGQgPSBUKQpgYGAKCkZvbGxvd2luZyBvdGhlciBhbmFseXNpcywgSSBleGFtaW5lZCB0aGlzIHNlcGFyYXRlbHkgdXNpbmcgUG9yb3NpdHkgKER1bGluKSBhbmQgTWFydGhhIFN0b3J5IGFzIGluZGljZXMgb2YgcG9yb3NpdHkuIEluIGJvdGggY2FzZXMsIHJlbGlnaW9zaXR5IHdhcyBhIHNpZ25pZmljYW50IHBvc2l0aXZlIHByZWRpY3RvciBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSAoYXMgd2UnZCBleHBlY3QpLiBCdXQsIGltcG9ydGFudGx5LCB0aGUgbWFpbiBlZmZlY3RzIG9mIHBvcm9zaXR5IHJlbWFpbmVkIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gYm90aCBhbmFseXNlcywgZXZlbiBhZnRlciBjb250cm9sbGluZyBmb3IgcGFydGljaXBhbnRzJyBzZWxmLXJlcG9ydGVkIHJlbGlnaW9zaXR5IChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gVGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gcmVtYWluZWQgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSB3aGVuIHBvcm9zaXR5IHdhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3RvcnkgKHNlY29uZCB0YWJsZSksIGJ1dCBub3Qgd2hlbiBwb3Jvc2l0eSB3YXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSAoYWx0aG91Z2ggc29tZSB3b3VsZCBjb25zaWRlciB0aGlzIGVmZmVjdCB0byBiZSAibWFyZ2luYWxseSBzaWduaWZpY2FudCIpLgoKKipNeSB0YWtlLWF3YXkgaGVyZSBpcyB0aGF0IHJlbGlnaW9zaXR5IGRvZXMgX25vdF8gZnVsbHkgImV4cGxhaW4gYXdheSIgdGhlIG9ic2VydmVkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSwgb24gdGhlIG9uZSBoYW5kLCBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UsIG9uIHRoZSBvdGhlci4qKgoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIEluIGVhY2ggc2l0ZSBjb25zaWRlcmVkIGFsb25lCgpIZXJlIEkgY29uZHVjdCBhIHNldCBvZiBwYXJhbGxlbCBhbmFseXNlcywgY29uc2lkZXJpbmcgZWFjaCBzaXRlIGFsb25lLgoKYGBge3J9CmRfc3RkX2J5c2l0ZV9yZWxpZyA8LSBkMCAlPiUgIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RlbV9ob3cuc3BydC5yZWxnKSAlPiUKICBtdXRhdGUocmVsaWdfc3RkID0gc2NhbGUocDdfZGVtX2hvdy5zcHJ0LnJlbGcsIHNjYWxlID0gVCkpICU+JQogIGZ1bGxfam9pbihkX3N0ZF9ieXNpdGUpCgpkX2g4X2J5c2l0ZSA8LSBkX3N0ZF9ieXNpdGVfcmVsaWcgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfaDhfYnlzaXRlJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfaDhfYnlzaXRlJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyOF9ieXNpdGVfcG9yX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfcG9yX3VzKQoKcjhfYnlzaXRlX3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjhfYnlzaXRlX3Bvcl9naCkKCnI4X2J5c2l0ZV9wb3JfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdGgpCgpyOF9ieXNpdGVfcG9yX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfcG9yX2NoKQoKcjhfYnlzaXRlX3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyOF9ieXNpdGVfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyOF9ieXNpdGVfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCAxNywgMzIpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMzMsIDQ4KSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDQ5LCA2NCkgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDY1LCA4MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgNjYsIDE2KSksIGJvbGQgPSBUKSAlPiUKICByb3dfc3BlYyhjKHNlcSgzLCA2NywgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDQsIDY4LCAxNikpLCBib2xkID0gVCkKYGBgCgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZTogCgpgYGB7cn0KcjhfYnlzaXRlX21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjhfYnlzaXRlX21tX3VzKQoKcjhfYnlzaXRlX21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjhfYnlzaXRlX21tX2doKQoKcjhfYnlzaXRlX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjhfYnlzaXRlX21tX3RoKQoKcjhfYnlzaXRlX21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjhfYnlzaXRlX21tX2NoKQoKcjhfYnlzaXRlX21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI4X2J5c2l0ZV9tbV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjhfYnlzaXRlX21tX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjhfYnlzaXRlX21tX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCAxNywgMzIpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMzMsIDQ4KSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDQ5LCA2NCkgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDY1LCA4MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgNjYsIDE2KSksIGJvbGQgPSBUKSAlPiUKICByb3dfc3BlYyhjKHNlcSgzLCA2NywgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDQsIDY4LCAxNikpLCBib2xkID0gVCkKYGBgCgpJIHNlZSB0d28gZ2VuZXJhbCBwYXR0ZXJucyBoZXJlOgoKMS4gSW4gdGhlIFVTLCBUaGFpLCBhbmQgQ2hpbmVzZSBzYW1wbGVzLCBhYnNvcnB0aW9uLCBwb3Jvc2l0eSwgYW5kIHJlbGlnaW9zaXR5IGFsbCByZW1haW4gc2lnbmlmaWNhbnQgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB3aGVuIGNvbnRyb2xsaW5nIGZvciBlYWNoIG90aGVyIGluIG9uZSBvZiB0aGUgdHdvIGFuYWx5c2VzIHJlcG9ydGVkIGFib3ZlLiBJbiB0aGUgb3RoZXIgYW5hbHlzaXMsIHRoZXJlIGlzIHNvbWUgZXZpZGVuY2UgZm9yICJzd2FtcGluZyBvdXQiOiBJbiB0aGUgVVMgYW5kIENoaW5lc2Ugc2FtcGxlcywgdGhlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGJlY29tZXMgbm9uLXNpZ25pZmljYW50IGluIHRoZSBvdGhlciBhbmFseXNpczsgYW5kIGluIFRoYWlsYW5kLCB0aGUgZWZmZWN0IG9mIHBvcm9zaXR5IGJlY29tZXMgbm9uLXNpZ25pZmljYW50IGluIHRoZSBvdGhlciBhbmFseXNpcy4gR2VuZXJhbGx5IHNwZWFraW5nLCB0aG91Z2gsICoqSSdkIHNheSB0aGlzIGlzIG1vZGVyYXRlIGV2aWRlbmNlIHRoYXQgcmVsaWdpb3NpdHkgZG9lcyBfbm90XyBmdWxseSAiZXhwbGFpbiBhd2F5IiB0aGUgZWZmZWN0cyBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiB0aGVzZSB0aHJlZSBzaXRlcyAodGhlIFVTLCBUaGFpbGFuZCwgYW5kIENoaW5hKS4qKgoyLiBJbiBHaGFuYSBhbmQgVmFudWF0dSwgb25seSByZWxpZ2lvc2l0eSByZW1haW5zIGEgc2lnbmlmaWNhbnQgcHJlZGljdG9yIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIGluIHRoZXNlIGFuYWx5c2VzLiAqKlRoaXMgY291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgZXZpZGVuY2UgdGhhdCByZWxpZ2lvc2l0eSBfZG9lc18gImV4cGxhaW4gYXdheSIgdGhlIGVmZmVjdHMgb2YgYWJzb3JwdGlvbiBhbmQgcG9yb3NpdHkgaW4gdGhlc2UgdHdvIChkZXZvdXRseSBDaHJpc3RpYW4pIHNpdGVzIChHaGFuYSBhbmQgVmFudWF0dSkuKioKClRvIGhlbHAgd2l0aCBvdXIgaW50ZXJwcmV0YXRpb24sIGhlcmUgYXJlIHRoZSBjb3JyZWxhdGlvbnMgd2l0aCByZWxpZ2lvc2l0eSwgdGhpcyB0aW1lIGxvb2tpbmcgYXQgc2NvcmVzIHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlOgoKYGBge3J9CmRfc3RkX2J5c2l0ZV9yZWxpZ19jb3IgPC0gZF9zdGRfYnlzaXRlX3JlbGlnICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHJlbGlnX3N0ZCwgYWJzLCBwb3IsIG1tLCBkc2UsIHNlKSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UoYWJzID0gY29yKHJlbGlnX3N0ZCwgYWJzLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIHBvciA9IGNvcihyZWxpZ19zdGQsIHBvciwgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlLm9icyIpLAogICAgICAgICAgICBtbSA9IGNvcihyZWxpZ19zdGQsIG1tLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIGRzZSA9IGNvcihyZWxpZ19zdGQsIGRzZSwgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlLm9icyIpLAogICAgICAgICAgICBzZSA9IGNvcihyZWxpZ19zdGQsIHNlLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIikpICU+JQogIGdhdGhlcihzY2FsZSwgY29yX3JlbGlnLCAtcDdfY3RyeSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuOSwgaW5jbHVkZSA9IFR9CmRfc3RkX2J5c2l0ZV9yZWxpZyAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCByZWxpZ19zdGQsIGFicywgcG9yLCBtbSwgZHNlLCBzZSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaiwgcmVsaWdfc3RkKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkX2J5c2l0ZV9yZWxpZ19jb3IpICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIEV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZWxpZ19zdGQsIHkgPSBzY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5LCBzY2FsZXMgPSAiZnJlZV95IikgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5LCBzY2FsZSwgY29yX3JlbGlnKSAlPiUgCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtaW5feCA9IG1pbihyZWxpZ19zdGQsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfeSA9IG1heChzY29yZSwgbmEucm0gPSBUKSkgJT4lIAogICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgbXV0YXRlKHggPSBtaW4obWluX3gpKSAlPiUKICAgICAgICAgICAgICAgZ3JvdXBfYnkoc2NhbGUpICU+JQogICAgICAgICAgICAgICBtdXRhdGUoeSA9IG1heChtYXhfeSkpICU+JQogICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZTAoInIgPSAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQocm91bmQoY29yX3JlbGlnLCAyKSwgbnNtYWxsID0gMikpLAogICAgICAgICAgICAgICAgIHggPSB4LCB5ID0geSksCiAgICAgICAgICAgICBoanVzdCA9IDAsIHZqdXN0ID0gMSwgYWxwaGEgPSAwLjUsIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiUmVsYXRpb25zaGlwcyBiZXR3ZWVuIHNlbGYtcmVwb3J0ZWQgcmVsaWdpb3NpdHkgYW5kIHNjYWxlcyBvZiBpbnRlcmVzdCIsCiAgICAgICB4ID0gIkFncmVlbWVudCB3aXRoIHRoZSBzdGF0ZW1lbnQgJ0kgY29uc2lkZXIgbXlzZWxmIGEgcmVsaWdpb3VzIG9yIHNwaXJpdHVhbCBwZXJzb24uJyAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwgCiAgICAgICB5ID0gIlNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgV2hpY2ggZXhwZXJpZW5jZXMgYXJlIHByZWRpY3RlZCBieSBhYnNvcnB0aW9uIHZzLiBwb3Jvc2l0eT8KCiMjIyBDb2xsYXBzaW5nIGFjcm9zcyBzaXRlcwoKYGBge3J9CmRfZXhwIDwtIGQwICU+JSAjIGFsbCBwYXJ0aWNpcGFudHMKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2hvdy5zcHJ0LnJlbGcsCiAgICAgICAgIHA3X2Fic190b3RhbCwgcDdfcG9yX3RvdGFsLCBwN19tbV90b3RhbCwKICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW4iKSkgJT4lCiAgc2VsZWN0KC1jKGNvbnRhaW5zKCJjaGVjayIpLCBlbmRzX3dpdGgoIl9jYXQiKSwKICAgICAgICAgICAgcDdfZHNlX3RvdGFsLCBwN19zZV90b3RhbCwgcDdfdW5ldl90b3RhbCwgcDdfZXhzZW5fdG90YWwpKSAlPiUKICAjIHN0YW5kYXJkaXplIGV2ZXJ5dGhpbmcsIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCiAgbXV0YXRlX2F0KHZhcnMoLWMocDdfY3RyeSwgcDdfc3ViaikpLCBmdW5zKHNjYWxlKC4sIHNjYWxlID0gVCkpKSAKICAjICMgcmVzY2FsZSBldmVyeXRoaW5nIHRvIHJ1biBmcm9tIDAtMQogICMgbXV0YXRlX2F0KHZhcnMoLWMocDdfY3RyeSwgcDdfc3ViaikpLCBmdW5zKHNjYWxlczo6cmVzY2FsZSguLCB0byA9IGMoMCwgMSkpKSkKYGBgCgpgYGB7cn0KZF9leHBfY29yIDwtIGRfZXhwICU+JSAKICBzZWxlY3QocDdfc3ViaiwgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW5fIikpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X3N1YmosIHA3X2Fic190b3RhbCkpICU+JQogIGdyb3VwX2J5KHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UoYWJzX2NvciA9IGNvcihwN19hYnNfdG90YWwsIHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfc3ViaiwgcDdfcG9yX3RvdGFsLCAKICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW5fIikpICU+JQogICAgICAgICAgICAgIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X3N1YmosIHA3X3Bvcl90b3RhbCkpICU+JQogICAgICAgICAgICAgIGdyb3VwX2J5KHF1ZXN0aW9uKSAlPiUKICAgICAgICAgICAgICBzdW1tYXJpc2UocG9yX2NvciA9IGNvcihwN19wb3JfdG90YWwsIHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSkpICU+JQogIGZ1bGxfam9pbihkX2V4cCAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KHA3X3N1YmosIHA3X21tX3RvdGFsLCAKICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW5fIikpICU+JQogICAgICAgICAgICAgIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X3N1YmosIHA3X21tX3RvdGFsKSkgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogICAgICAgICAgICAgIHN1bW1hcmlzZShtbV9jb3IgPSBjb3IocDdfbW1fdG90YWwsIHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSkgJT4lCiAgZ2F0aGVyKHdoaWNoX2NvciwgY29yLCBlbmRzX3dpdGgoIl9jb3IiKSkgJT4lCiAgbGVmdF9qb2luKHZhcl9rZXkpICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbnVzdWFsIEV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpLAogICAgICAgICB3aGljaF9jb3IgPSByZWNvZGVfZmFjdG9yKHdoaWNoX2NvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzX2NvciIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcl9jb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbV9jb3IiID0gIk1hcnRoYSBTdG9yeSIpKQpgYGAKCkhlcmUgYXJlIHRoZSB0b3AgdGVuIG1vc3Qgc3Ryb25nbHkgY29ycmVsYXRlZCBpdGVtcyBmb3IgZWFjaCBvZiBvdXIgdGhyZWUgcHJlZGljdG9ycyBvZiBpbnRlcmVzdCAoQWJzb3JwdGlvbiwgUG9yb3NpdHkgKER1bGluKSwgYW5kIE1hcnRoYSBTdG9yeSk6CgpgYGB7ciwgaW5jbHVkZSA9IFR9CmJpbmRfcm93cyhkX2V4cF9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIkFic29ycHRpb24iKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgZF9leHBfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJQb3Jvc2l0eSAoRHVsaW4pIikgJT4lCiAgICAgICAgICAgIHRvcF9uKDEwLCBhYnMoY29yKSkgJT4lCiAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgIGRfZXhwX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiTWFydGhhIFN0b3J5IikgJT4lCiAgICAgICAgICAgIHRvcF9uKDEwLCBhYnMoY29yKSkgJT4lCiAgICAgICAgICAgIHVuZ3JvdXAoKSkgJT4lCiAgYXJyYW5nZSh3aGljaF9jb3IsIGRlc2MoYWJzKGNvcikpKSAlPiUKICBzZWxlY3QoY29yLCBxdWVzdGlvbl90ZXh0LCBzY2FsZSkgJT4lCiAgcmVuYW1lKENvcnJlbGF0aW9uID0gY29yLCBgUXVlc3Rpb24gdGV4dGAgPSBxdWVzdGlvbl90ZXh0LCBTY2FsZSA9IHNjYWxlKSAlPiUKICBrYWJsZShkaWdpdHMgPSAzKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiQWJzb3JwdGlvbiIsIDEsIDEwKSAlPiUKICBncm91cF9yb3dzKCJQb3Jvc2l0eSAoRHVsaW4pIiwgMTEsIDIwKSAlPiUKICBncm91cF9yb3dzKCJNYXJ0aGEgU3RvcnkiLCAyMSwgMzApCmBgYAoKQW5kIGhlcmUncyBhIHZpc3VhbGl6YXRpb24gb2YgdGhlIGNvcnJlbGF0aW9ucyBvZiB0aGVzZSB0aHJlZSBwcmVkaWN0b3JzIHdpdGggYWxsICJleHBlcmllbmNlIiBpdGVtcyBpbiB0aGlzIHBhY2tldCAoc3Bpcml0dWFsIGFuZCBzZWN1bGFyKToKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMiwgaW5jbHVkZSA9IFR9CmdncGxvdChkX2V4cF9jb3IgJT4lCiAgICAgICAgIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgODApKSwKICAgICAgIGFlcyh4ID0gY29yLCB5ID0gcmVvcmRlcihxdWVzdGlvbl90ZXh0LCBkZXNjKG9yZGVyKSksIAogICAgICAgICAgIGNvbG9yID0gd2hpY2hfY29yKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiAuLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludCgpICsKICBsYWJzKHggPSAiUGVhcnNvbiBjb3JyZWxhdGlvbiAodGhlb3JldGljYWwgcmFuZ2U6IC0xIHRvIDEpIiwKICAgICAgIHkgPSAiUXVlc3Rpb24gKGJ5IHNjYWxlKSIsCiAgICAgICBjb2xvciA9ICJQcmVkaWN0b3IiKQpgYGAKCiMjIyBDb25zaWRlcmluZyBlYWNoIHNpdGUgaW5kaXZpZHVhbGx5CgojIyMgQ29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKCmBgYHtyfQpkX2V4cF9ieXNpdGUgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgd2l0aGluIGVhY2ggc2l0ZQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZSguLCBzY2FsZSA9IFQpKSkgJT4lCiAgIyAjIHJlc2NhbGUgZXZlcnl0aGluZyB0byBydW4gZnJvbSAwLTEKICAjIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZXM6OnJlc2NhbGUoLiwgdG8gPSBjKDAsIDEpKSkpCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfZXhwX2J5c2l0ZV9jb3IgPC0gZF9leHBfYnlzaXRlICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW5fIikpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UoYWJzX2NvciA9IGNvcihwN19hYnNfdG90YWwsIHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwX2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KHA3X3N1YmosIHA3X3Bvcl90b3RhbCwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfZHNlXyIpLCBjb250YWlucygiX3NlXyIpLCAKICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIl91bmV2XyIpLCBjb250YWlucygiX2V4c2VuXyIpKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19zdWJqLCBwN19wb3JfdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcl9jb3IgPSBjb3IocDdfcG9yX3RvdGFsLCByZXNwb25zZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBmdWxsX2pvaW4oZF9leHBfYnlzaXRlICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0aHJlZSBtb3N0IHN0cm9uZ2x5IGNvcnJlbGF0ZWQgaXRlbXMgZm9yIGVhY2ggb2Ygb3VyIHRocmVlIHByZWRpY3RvcnMgb2YgaW50ZXJlc3QgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpOgoKYGBge3IsIGluY2x1ZGUgPSBUfQpiaW5kX3Jvd3MoZF9leHBfYnlzaXRlX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigzLCBhYnMoY29yKSkgJT4lCiAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgIGRfZXhwX2J5c2l0ZV9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCkpICU+JQogIGFycmFuZ2Uod2hpY2hfY29yLCBwN19jdHJ5LCBkZXNjKGFicyhjb3IpKSkgJT4lCiAgc2VsZWN0KHA3X2N0cnksIGNvciwgcXVlc3Rpb25fdGV4dCwgc2NhbGUpICU+JQogIHJlbmFtZShTaXRlID0gcDdfY3RyeSwgQ29ycmVsYXRpb24gPSBjb3IsIAogICAgICAgICBgUXVlc3Rpb24gdGV4dGAgPSBxdWVzdGlvbl90ZXh0LCBTY2FsZSA9IHNjYWxlKSAlPiUKICBrYWJsZShkaWdpdHMgPSAzKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sbGFwc2Vfcm93cygxOjIpICU+JQogIGdyb3VwX3Jvd3MoIkFic29ycHRpb24iLCAxLCAxNSkgJT4lCiAgZ3JvdXBfcm93cygiUG9yb3NpdHkgKER1bGluKSIsIDE2LCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiTWFydGhhIFN0b3J5IiwgMzEsIDQ1KQpgYGAKCkFuZCBoZXJlJ3MgYSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb3JyZWxhdGlvbnMgb2YgdGhlc2UgdGhyZWUgcHJlZGljdG9ycyB3aXRoIGFsbCAiZXhwZXJpZW5jZSIgaXRlbXMgaW4gdGhpcyBwYWNrZXQgKHNwaXJpdHVhbCBhbmQgc2VjdWxhcik6CgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDEuOCwgaW5jbHVkZSA9IFR9CmdncGxvdChkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDgwKSksCiAgICAgICBhZXMoeCA9IGNvciwgeSA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dCwgZGVzYyhvcmRlcikpLCAKICAgICAgICAgICBjb2xvciA9IHdoaWNoX2NvcikpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fcG9pbnQoKSArCiAgbGFicyh4ID0gIlBlYXJzb24gY29ycmVsYXRpb24gKHRoZW9yZXRpY2FsIHJhbmdlOiAtMSB0byAxKSIsCiAgICAgICB5ID0gIlF1ZXN0aW9uIChieSBzY2FsZSkiLAogICAgICAgY29sb3IgPSAiUHJlZGljdG9yIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIE92ZXJhbGwgc2NvcmVzCgpgYGB7cn0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpkX3Bhc3NfbWIgPC0gZCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JSAKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiKSAlPiUgCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CiMgZXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2sKc2NvcmVzX3Bsb3RfcGFzc19hIDwtIGQgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF93cmFwKH5zY2FsZSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9qaXR0ZXIoaGVpZ2h0ID0gMC4yLCB3aWR0aCA9IDAuNCwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9wYXNzX21iLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAyKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMiLAogICAgICAgc3VidGl0bGUgPSAiRXhsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyfQojIGV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCBhbnkgYXR0ZW50aW9uIGNoZWNrCnNjb3Jlc19wbG90X3Bhc3NfYiA8LSBkX3Bhc3NfbWIgJT4lIAogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IG1lYW4sIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF93cmFwKH5zY2FsZSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBzaG93LmxlZ2VuZCA9IEYpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNjb3JlcyBmb3IgYWxsIHNjYWxlcyAoem9vbWVkIGluKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGx1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLjIsIGluY2x1ZGUgPSBUfQojIGV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCBhbnkgYXR0ZW50aW9uIGNoZWNrCnBsb3RfZ3JpZChzY29yZXNfcGxvdF9wYXNzX2EsIHNjb3Jlc19wbG90X3Bhc3NfYiwgbmNvbCA9IDEpCmBgYAoKYGBge3J9CiMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKZF9hbGxfbWIgPC0gZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUgCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lIAogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnNjb3Jlc19wbG90X2FsbF9hIDwtIGQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAuMiwgd2lkdGggPSAwLjQsIGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGRfYWxsX21iLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAyKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMsIGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3J9CiMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKc2NvcmVzX3Bsb3RfYWxsX2IgPC0gZF9hbGxfbWIgJT4lIAogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IG1lYW4sIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF93cmFwKH5zY2FsZSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBzaG93LmxlZ2VuZCA9IEYpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNjb3JlcyBmb3IgYWxsIHNjYWxlcyAoem9vbWVkIGluKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cywgZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDIuMiwgaW5jbHVkZSA9IFR9CiMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKcGxvdF9ncmlkKHNjb3Jlc19wbG90X2FsbF9hLCBzY29yZXNfcGxvdF9hbGxfYiwgbmNvbCA9IDEpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBIaXN0b2dyYW1zIGZvciBlYWNoIHNjYWxlCgojIyBBYnNvcnB0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19hYnNfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfYWJzX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDM0LCAxNykpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiQWJzb3JwdGlvbiIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMzQpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfYWJzX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19hYnNfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfYWJzX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDM0LCAxNykpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiQWJzb3JwdGlvbiIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBhYnNvcnB0aW9uIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMzQpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RzZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMzUsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNzAsIDM1KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcwKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2RzZV9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RzZV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZHNlX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RzZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzNSwgeSA9IDAuMDUsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA3MCwgMzUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBEU0Ugc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03MCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFNwaXJpdHVhbCBldmVudHMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19zZV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfc2VfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3NlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19zZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSA0OCwgeSA9IDAuMDUsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA5NiwgMjQpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNwaXJpdHVhbCBldmVudHMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTk2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3NlX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3NlX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19zZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gNDgsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgOTYsIDI0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTcGlyaXR1YWwgZXZlbnRzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIFNFIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtOTYpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBXYXlzIG9mIGJlaW5nCgojIyMgQWxsIGl0ZW1zCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfd29iX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN193b2JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfd29iX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDAsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM2LCAzNiwgMTgpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIldheXMgb2YgYmVpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzYgdG8gMzYpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN193b2JfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3dvYl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfd29iX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN193b2JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMCwgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzYsIDM2LCAxOCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiV2F5cyBvZiBiZWluZyIsIAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMgKGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrcykiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM2IHRvIDM2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCiMjIyBFeGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiX3dvYl8iKSwKICAgICAgICAgLWMoY29udGFpbnMoInRvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpLCBjb250YWlucygicmV2ZXJzZSIpKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGFzLm51bWVyaWMocmVzcG9uc2UpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZV9ub3JldiwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeCA9IDAsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTI4LCAyOCwgMTQpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIldheXMgb2YgYmVpbmcgKGV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zKSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yOCB0byAyOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmRfY3RsX25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAid29iIiwgIWlzLm5hKHNjb3JlX25vcmV2KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yOCwgMjgsIDE0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yOCB0byAyOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBVbmNvbW1vbiBldmVudHMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN191bmV2X3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN191bmV2X3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDksIHkgPSAwLjIwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTgsIDkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlVuY29tbW9uIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMTgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfdW5ldl9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3VuZXZfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3VuZXZfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3VuZXZfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3VuZXZfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gOSwgeSA9IDAuMjAsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxOCwgOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiVW5jb21tb24gZXZlbnRzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIFVORVYgc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC0xOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEV4dHJhc2Vuc29yeQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19leHNlbl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZXhzZW5fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMzAsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA3LCAxKSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJFeHRyYXNlbnNvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfZXhzZW5fY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZXhzZW5fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjMwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNywgMSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRXh0cmFzZW5zb3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIEVYU0VOIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNykiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEhhcmQgdGhpbmtpbmcKCiMjIyBBbGwgaXRlbXMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19odGhrX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19odGhrX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzgsIDM4LCAxOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZCB0aGlua2luZyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0zOCB0byAzOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2h0aGtfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2h0aGtfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2h0aGtfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2h0aGtfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0zOCwgMzgsIDE5KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXJkIHRoaW5raW5nIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cyAoZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzKSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzggdG8gMzgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKIyMjIEV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJfaHRoa18iKSwKICAgICAgICAgLWMoY29udGFpbnMoInRvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpKSkgJT4lCiAgICBzZWxlY3QoLWMocDdfaHRoa19ub3QuZnVuLCBwN19odGhrX2xpbC5jaGFsbGVuZywgcDdfaHRoa19hdm9pZC50aGluaywKICAgICAgICAgICAgICBwN19odGhrX2hyZC5oYXYudG8sIHA3X2h0aGtfc21hbC5kYWlseSwgcDdfaHRoa19saWwudGhvdWdodCwKICAgICAgICAgICAgICBwN19odGhrX25vdC5leGNpdGluZywgcDdfaHRoa19tZW50YWwuZWZmcnQsIAogICAgICAgICAgICAgIHA3X2h0aGtfam9iLmRvbmUpKSAlPiUgCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGFzLm51bWVyaWMocmVzcG9uc2UpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZV9ub3JldiwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMjAsIDIwLCAxMCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZCB0aGlua2luZyAoZXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTIwIHRvIDIwKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZF9jdGxfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJodGhrIiwgIWlzLm5hKHNjb3JlX25vcmV2KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTIwLCAyMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmcgKGV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zKSIsIAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMgKGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrcykiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTIwIHRvIDIwKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgUG9yb3NpdHkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3Bvcl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfcG9yX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19wb3JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMTcsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMzQsIDE3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJQb3Jvc2l0eSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMzQpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfcG9yX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19wb3JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfcG9yX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDM0LCAxNykpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiUG9yb3NpdHkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gUE9SIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMzQpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBNYXJ0aGEgc3RvcnkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19tbV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfbW1fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X21tX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAyNywgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA1NCwgMjcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIk1hcnRoYSBzdG9yeSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNTQpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfbW1fY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19tbV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfbW1fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X21tX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAyNywgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA1NCwgMjcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIk1hcnRoYSBzdG9yeSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBNTSBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTU0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBEZW1vZ3JhcGhpY3MKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIlBhcnRpY2lwYW50cyB3aG8gcGFzc2VkIGFsbCBhdHRlbnRpb24gY2hlY2tzIikKZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqKSAlPiUKICBjb3VudChwN19jdHJ5KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqKSAlPiUKICBjb3VudChwN19jdHJ5KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIlBhcnRpY2lwYW50cyB3aG8gcGFzc2VkIGFsbCBhdHRlbnRpb24gY2hlY2tzIikKZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fc2V4KSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBjb3VudChwN19kZW1fc2V4KSAlPiUKICBtdXRhdGUocHJvcCA9IHJvdW5kKG4vc3VtKG4pLCAyKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHA3X2RlbV9zZXgsIHByb3ApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiQWxsIHBhcnRpY2lwYW50cyIpCmQwICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RlbV9zZXgpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIGNvdW50KHA3X2RlbV9zZXgpICU+JQogIG11dGF0ZShwcm9wID0gcm91bmQobi9zdW0obiksIDIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1uKSAlPiUKICBzcHJlYWQocDdfZGVtX3NleCwgcHJvcCkKYGBgCgpJbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGEgX3ZlcnlfIHN1YnN0YW50aWFsIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyBpbiBUaGFpbGFuZCB3ZXJlIGZlbWFsZSwgYW5kIGEgc2xpZ2h0IG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyBpbiBWYW51YXR1IHdlcmUgZmVtYWxlLgoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiUGFydGljaXBhbnRzIHdobyBwYXNzZWQgYWxsIGF0dGVudGlvbiBjaGVja3MiKQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RlbV9hZ2UpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWVhbiA9IG1lYW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc2QgPSBzZChwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtaW4gPSBtaW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWF4ID0gbWF4KHA3X2RlbV9hZ2UsIG5hLnJtID0gVCkpICU+JQogIG11dGF0ZV9hdCh2YXJzKG1lZGlhbiwgbWVhbiwgc2QsIG1pbiwgbWF4KSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiQWxsIHBhcnRpY2lwYW50cyIpCmQwICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RlbV9hZ2UpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWVhbiA9IG1lYW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc2QgPSBzZChwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtaW4gPSBtaW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWF4ID0gbWF4KHA3X2RlbV9hZ2UsIG5hLnJtID0gVCkpICU+JQogIG11dGF0ZV9hdCh2YXJzKG1lZGlhbiwgbWVhbiwgc2QsIG1pbiwgbWF4KSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAo=